在Linux系统中,通过脚本实现SSH互信(即无需密码即可从一台计算机访问另一台计算机)可以通过以下步骤完成:
首先,在两台计算机上分别生成SSH密钥对。假设两台计算机分别是host1
和host2
。
在host1
上:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
在host2
上:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将host1
的公钥复制到host2
的~/.ssh/authorized_keys
文件中。
在host1
上:
ssh-copy-id user@host2
将host2
的公钥复制到host1
的~/.ssh/authorized_keys
文件中。
在host2
上:
ssh-copy-id user@host1
创建一个脚本ssh_auto_trust.sh
,内容如下:
#!/bin/bash
# 设置主机名和用户名
HOST1="host1"
USER1="user1"
HOST2="host2"
USER2="user2"
# 生成密钥对(如果还没有生成)
if ! ssh-keygen -q -f ~/.ssh/id_rsa; then
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
fi
# 将本地公钥添加到远程主机的authorized_keys文件
cat ~/.ssh/id_rsa.pub | ssh $USER2@$HOST2 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# 测试连接
ssh $USER2@$HOST2
设置脚本权限并运行:
chmod +x ssh_auto_trust.sh
./ssh_auto_trust.sh
如果你希望每次运行脚本时自动添加新的公钥,可以将公钥添加的逻辑放在脚本中,而不是使用ssh-copy-id
。例如:
#!/bin/bash
# 设置主机名和用户名
HOST1="host1"
USER1="user1"
HOST2="host2"
USER2="user2"
# 生成密钥对(如果还没有生成)
if ! ssh-keygen -q -f ~/.ssh/id_rsa; then
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
fi
# 将本地公钥添加到远程主机的authorized_keys文件
cat ~/.ssh/id_rsa.pub | ssh $USER2@$HOST2 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
这样,每次运行脚本时,都会将本地的公钥添加到远程主机的authorized_keys
文件中,从而实现自动互信。
~/.ssh/id_rsa
)的安全,不要将其泄露给他人。~/.ssh
目录和authorized_keys
文件的权限设置正确,通常应为700
和600
。通过以上步骤,你可以在Linux系统中通过脚本实现SSH互信。