局域网内服务器之间可以通过SSH进行无密码通信,它的实现主要依赖于SSH密钥对(一个公钥和一个私钥)。公钥放在远程服务器上,而私钥保留在本地。当你尝试通过SSH连接到远程服务器时,服务器会检查你是否持有匹配的私钥。如果匹配,允许登录而无需密码。以下是设置无密码SSH通信的步骤:
1. 生成SSH密钥对
在本地机器上执行以下命令来生成一个SSH密钥对。当系统提示你输入文件保存路径时,可以直接按回车键使用默认路径(通常是~/.ssh/id_rsa
)。系统还会提示你输入一个密码,但为了实现无密码登录,你可以直接回车跳过,不设置密码。
ssh-keygen -t rsa -b 2048
这里-t
指定密钥类型,-b
指定密钥长度。
2. 将公钥复制到远程服务器
使用ssh-copy-id
命令将你的公钥复制到远程服务器的~/.ssh/authorized_keys
文件中。替换下面的username
和remote_host
为你的远程服务器的用户名和地址。
ssh-copy-id username@remote_host
这一步需要你输入远程服务器的密码。
如果你的系统没有ssh-copy-id
命令,可以手动完成这一步骤:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3. 通过SSH登录验证
现在,尝试通过SSH登录到远程服务器,你应该不需要输入密码:
ssh username@remote_host
注意事项
- 确保远程服务器的
~/.ssh
目录的权限为700(即只有所有者可以读写执行),~/.ssh/authorized_keys
文件的权限为600(即只有所有者可以读写)。 - 如果无密码登录失败,检查远程服务器的
/etc/ssh/sshd_config
文件中的配置,确保PubkeyAuthentication
选项没有被禁用,并且AuthorizedKeysFile
指向正确的文件。
通过这些步骤,你应该能够成功设置SSH无密码登录,从而简化远程服务器的管理过程。
注意:这里面是一台服务器为本地服务器A,另外一台为远程服务器B,在本地服务器A上完成SSH密钥生成等操作,布署完成以后可以在A服务器上免密登陆B服务器,但是B服务器无法免密登陆A,如果需要B免密登陆A,需要将B作为本地服务器,再完成一次上面的操作。