ssh配置用于连接多个远程主机踩坑指南
ssh登录远程主机(服务器)一般有两种方式:无密钥方式 和 有密钥方式。无密钥方式需要每次都输入密码,而有密钥方式仅需第一次使用输入密码,以后均无需输入密码就能正确登录。
1. 安装ssh
-
Server端需要安装并开启SSH服务
-
Client端需要支持 ssh-keygen 命令生成密钥
-
可用如下命令验证:
ssh localhost
如果结果为:
则服务器端没有安装 ssh-server。安装命令为:
sudo apt-get install openssh-server
2. 使用ssh
-
无密钥方式,使用格式为:
ssh 用户名@主机IP
-
有密钥方式
- 生成秘钥对(client端)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # -f 指定密钥文件存放位置(当前用户主目录/.ssh/id_rsa),id_rsa为私钥,id_rsa.pub为公钥
- 将Client端的公钥添加到用于认证的Server端的公钥文件中
ssh-copy-id user@ip_address
执行完上述命令之后,在server端可以看到用户目录/.ssh目录下生成了authorized_keys文件。也可以自己在(用户目录/.ssh)目录下创建authorized_keys文件,并将自己的公钥内容添加到文件中。
- 在server端禁用通过密码登陆SSH的方式
sudo vim /etc/ssh/sshd_config
打开文件后,去掉允许使用密钥自动登录的注释:
- 重启ssh服务:
sudo service ssh restart
- 在客户端重新使用ssh登录,发现不再需要密码了
ssh 用户名@主机IP
3. 配置 ssh 的 config 文件
存在多个远程主机时,配置 ssh 的 config 文件(位于 ~/.ssh/config)指定各个远程主机对应的密钥文件和端口号等信息。配置格式如下:
# HostA
Host HostA #服务器别名,只要是合法的变量名称且不重复即可,可任意指定,ssh命令通过该名称来连接到指定服务器,比如上面的 ssh hostA。在git或ssh中直接使用这个!!!!(git中配置远程仓库的时候@后面直接可以是别名)
HostName github.com # 服务器地址(域名、IP地址)
User yajie # ssh登录的用户名
Port 31510 # 端口号,在服务器上更改了 sshd 的默认端口号后,这里需要相应更改
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa # ssh私钥文件地址
4. 验证是否成功
ssh -vT git@host # 例如,ssh -vT git@github.com -v 选项用于输出详细连接过程,可以用于排错 git用户名为用于 Git 的特殊用户