一、SSH互信配置
在一个分布式的系统中,需要在不同的机器之间进行通信和文件的传输,SSH互信是一个很好的工具。它可以让某一个机器上的用户能够在无需输入密码的情况下,登录另一个远程机器。
首先,在每个机器上都需要安装SSH(server/client),这里以Ubuntu系统为例(以下命令需在终端中执行)
sudo apt-get update sudo apt-get install openssh-server
安装完成后,需要修改/etc/ssh/sshd_config文件:
sudo vim /etc/ssh/sshd_config
将PasswordAuthentication改为no
PasswordAuthentication no
重启SSH服务:
sudo service ssh restart
配置完成后,在A机器上生成公钥
ssh-keygen -t rsa
之后一直按Enter,如果遇到要输入密码的地方,可以直接按Enter,表示不用密码。
生成完成后,可以使用ssh-copy-id命令将公钥复制到B机器的authorized_keys文件中,以此建立两台机器之间的SSH信任关系。
ssh-copy-id -i ~/.ssh/id_rsa.pub user@B_server_IP
其中user为B机器上的用户名,B_server_IP是B机器的IP地址。
二、SSH互信公钥
SSH连接时,密钥将会被用来识别客户端和服务器,以确定用户是否有权限访问远程主机。公钥配对是SSH连接的关键,它允许安全地连接到远程主机而不需要提供密码。
在上面的配置中,使用ssh-keygen命令生成公钥,其中-rsa选项是用来指定使用RSA密钥算法,-t指定密钥类型,其默认为rsa。
而SSH互信中默认使用的公钥文件名是id_rsa.pub,如果需要自己指定文件名可以用-o选项
ssh-keygen -t rsa -f ~/.ssh/my_key_rsa
然后把公钥文件my_key_rsa.pub放到对应的机器的~/.ssh/authorized_keys文件中。
三、SSH互信失败
在进行SSH互信的过程中,可能会遇到不成功的情况,下面列出几个常见的失败情况的处理方法。
1、未知主机
当使用SSH连接远程机器时,如果出现如下提示“Warning: Permanently added...",表明第一次SSH连接将会添加目标主机的公钥到本地客户端,这个过程被称为known_hosts文件的更新。
但是如果在该主机重装系统、更改IP或指定了新主机名,那么就会在连接时出现下面的错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
解决方法是使用ssh-keygen命令更新known_hosts文件,如下所示:
ssh-keygen -R server_IP
示例为删除server_IP主机在known_hosts文件中的key。
2、权限不足
在A机器上生成公钥后,需要用 ssh-copy-id 命令将公钥(id_rsa.pub或者指定的文件)复制到B机器上的 ~/.ssh/authorized_keys 文件。如果在操作中出现权限错误,则可以使用以下命令授予当前登录用户的 /.ssh目录和 authorized_keys 文件所在目录的相应权限:
chmod -R 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
四、SSH互信连接机器
SSH互信建立完成后,可以直接连接远程机器,命令格式如下:
ssh remote_username@remote_ip_address
其中,remote_username为远程机器上的用户名,remote_ip_address为远程机器的IP地址。
五、SSH互信如何测试
可以使用ssh -v选项查看debug信息,以确认SSH互信配置是否正确。
ssh remote_username@remote_ip_address -v
其中-v参数用来显示详细的debug信息,如果SSH互信配置正确,会看到类似下面的输出信息:
debug1: Offering RSA public key: /home/user/.ssh/id_rsa debug1: Server accepts key: pkalg rsa-sha2-256 blen 149 debug1: Authentication succeeded (publickey).
六、SSH互信配置后可以执行shell
SSH互信配置完成后,可以直接在本地机器上执行远程机器shell命令:
ssh remote_username@remote_ip_address command
其中command是要执行的命令,例如:
ssh user@192.168.1.100 ls
用来在远程机器上查看当前目录下的文件列表。
七、SSH信任配置选取
这里的配置是指选择要信任哪些机器,可以通过/etc/ssh/ssh_config文件进行添加。
以某一个机器为例,配置文件如下:
Host specific_machine_alias HostName remote_ip_address User remote_username IdentityFile ~/.ssh/id_rsa
上述配置信息意味着,在连接specific_machine_alias时,连接这台机器的用户名是remote_username,使用的密钥是~/.ssh/id_rsa,并且远程主机的IP地址是remote_ip_address。
八、总结
以上,我们对SSH互信做了详细的阐述,包括SSH互信配置、SSH互信公钥、SSH互信失败、SSH互信连接机器、SSH互信如何测试、SSH互信配置后可以执行shell、SSH信任配置选取等方面。希望这篇文章能够帮助大家更好地使用SSH互信,提高工作效率。