通常在配置 git 代码托管服务器的时候,比如 github, gitee, gitlab 等,添加一个 ssh key 就能免密访问,这里的配置方法如下
生成 ssh key
如果不确定是否已经生成过 ssh key,查看 .ssh 目录
Mac OS
$ ls ~/.ssh
id_rsa id_rsa.pub known_hosts
Windows
需要先安装 git,查看 C:\Users\%用户名%\.ssh
如果存在,则 id_rsa.pub 就是公钥,其中的文本内容,整个复制后用来添加到托管服务器中
如果不存在该目录,通过以下命令生成,遇到的提示信息都直接回车(Windows 需要打开 git bash 再操作)
# -t 密钥类型,默认是 rsa,可以省略
# -C 注释,比如邮箱
ssh-keygen -t rsa -C "your_email_address"
known_hosts
当 ssh 连接到远程服务器的时候,会将该服务器的 pub key 和 ip 信息保存到 known_hosts 文件,如果下次这个 ip 被另一台服务器使用,则 ssh 免密登录时会发出警告,提示安全风险,是安全性策略的一个配置文件
复制公钥到远程服务器
ssh-copy-id 服务器用户名@服务器 ip
会将它写入到服务器 ~/ .ssh/authorized_key 中,使用时要输入远程服务器的登录密码
之后 ssh 登录远程服务器时就不用再输入密码
ssh 远程登录
# 常用的登录方法
ssh 服务器用户名@服务器 ip
# 本地和远程服务器用户名一致,省略用户名
ssh ip
# 调用图形界面
ssh -X 服务器用户名@服务器 ip
之后进入远程服务器的 shell,可以进行命令操作
ssh 远程拷贝
同本地 cp 操作类似,但是需要指定服务器名和 ip
本地复制到远程
scp 本地文件 server_name@server_ip: 远程路径
scp -r 本地目录 server_name@server_ip: 远程路径
远程复制到本地
scp server_name@server_ip: 远程文件 本地路径
scp -r server_name@server_ip: 远程目录 本地路径
ssh 远程命令
有时我们希望将远程命令写入脚本,方便批量处理,可以执行单独的 ssh 命令
ssh server_name@server_ip "df -h"
ssh server_name@server_ip "pwd; ls"