AI开发平台MODELARTS-NPU Snt9B裸金属服务器多机免密互通解决方案:处理方法
处理方法
该问题是由于docker容器sshd服务密钥缺失、sshd守护进程无法加载SSH主机密钥导致。在容器的/etc/ssh目录缺少ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key等文件。
按照以下步骤执行,即可成功配置并启动sshd服务。
- 生成相关ssh key。
- 执行如下三条命令,生成sshd服务所需的主机密钥。
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
此时/etc/ssh目录下应该存在如下文件。
图2 目录文件
- 修改sshd_config文件
vim /etc/ssh/sshd_config #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
将上面四行改为下方内容,监听所有的ipv4和ipv6地址:
Port 22 #AddressFamily any ListenAddress 0.0.0.0 ListenAddress ::
- 重新启动ssh服务。
/usr/sbin/sshd
- 执行如下三条命令,生成sshd服务所需的主机密钥。
- 免密互联。以2台Snt9B裸金属服务器为例,实现两台机器之间互相免密SSH登录,它们的VPC IP分别为:
172.16.0.67 server1 172.16.0.92 server2
- 客户端生成秘钥。
若想上server1免密连接上server2,需要在server1上生成私钥和公钥,执行如下命令:
ssh-keygen
ssh-keygen默认使用RSA算法,长度为2048位,执行完后会在用户目录下的.ssh文件夹创建rsa密钥类型的一个公钥和一个私钥,如下图。
图3 .ssh文件夹
- 传输公钥。
执行如下命令,将server1的公钥上传到server2的root用户下,会在server2的/root/.ssh目录下生成一个authorized_keys文件
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.0.92
在server2执行vim authorized_keys
可以看到server1的公钥已经写如在authorized_keys文件中,就可以实现server1免密SSH登录server2。
- 测试免密连接。
- 客户端生成秘钥。
常见问题:
- sshd启动时报错Loaded : error(Reason: No such file or directory)
yum install sshd // centos 系统 apt-get install sshd // ubuntu系统
- ssh互联时报错Bad owner or permissions on xxx(e.g. /root/.ssh/config)
该报错是权限问题导致,要保证报错显示的路径从.ssh目录开始权限均为600。例如:Bad owner or permissions on /root/.ssh/config。需要执行:
chmod 600 /root/.ssh chmod 600 /root/.ssh/config
- 配置免密互通后,调用ssh仍需要输入密码。
要保证调用ssh连接时的用户和.ssh目录以及.ssh/authorized_keys的用户名和用户组保持一致。例如,如果用户是root,那么用户名和用户组都要为root。