【昇腾】NPU Snt9B裸金属服务器多机免密互通解决方案
1. 问题现象
在使用华为云Snt9B裸金属服务器多机多docker容器进行ssh免密互通时,发现免密互通失败。报错为:
error: Could not load host key: /etc/ssh/ssh_host_rsa_key
error: Could not load host key: /etc/ssh/ssh_host_dsa_key
error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
在容器的/etc/ssh目录只有如下图所示的文件。
2. 解决方案
该问题是由于docker容器sshd服务密钥缺失,sshd守护进程无法加载SSH主机密钥导致。在容器的/etc/ssh目录缺少ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key等文件。
按照以下步骤执行,即可成功配置并启动sshd服务。
2.1 生成相关ssh key
1. 执行如下三条命令,生成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 ::
将上面四行改为:
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
监听所有的ipv4和ipv6地址。
3. 重新启动ssh服务
/usr/sbin/sshd
2.2 免密互联
本文以两台华为云Snt9B裸金属服务器为例,实现两台机器之间互相免密SSH登录,它们的vpc ip分别为
172.16.0.67 server1
172.16.0.92 server2
2.2.1 客户端生成秘钥
若想上server1免密连接上server2,需要在server1上生成私钥和公钥,执行如下命令:
ssh-keygen
ssh-keygen默认使用RSA算法,长度为2048位,执行完后会在用户目录下的.ssh文件夹创建rsa密钥类型的一个公钥和一个私钥,如下图。
2.2.2 传输公钥
执行如下命令,将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。
2.2.3 测试免密连接
server1已经可以免密ssh登录server2了。
按照同样的逻辑,将server2的公钥发给server1,即可实现server2免密ssh登录server1,从而实现免密互联。
3 FAQ
3.1 sshd启动时报错Loaded : error(Reason: No such file or directory)
该报错说明当前容器中未安装ssh服务,执行如下命令安装:
yum install sshd // centos 系统
apt-get install sshd // ubuntu系统
3.2 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
3.3 配置免密互通后,调用ssh仍需要输入密码
要保证调用ssh连接时的用户和.ssh目录以及.ssh/authorized_keys的用户名和用户组保持一致。
例如,如果用户是root,那么用户名和用户组都要为root。
- 点赞
- 收藏
- 关注作者
评论(0)