AI开发平台MODELARTS-NPU Snt9B裸金属服务器多机免密互通解决方案:处理方法

时间:2024-07-08 09:25:27

处理方法

该问题是由于docker容器sshd服务密钥缺失、sshd守护进程无法加载SSH主机密钥导致。在容器的/etc/ssh目录缺少ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key等文件。

按照以下步骤执行,即可成功配置并启动sshd服务。

  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 目录文件
    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 ::
    3. 重新启动ssh服务。
      /usr/sbin/sshd

  2. 免密互联。以2台Snt9B裸金属服务器为例,实现两台机器之间互相免密SSH登录,它们的VPC IP分别为:

    172.16.0.67 server1
    172.16.0.92 server2
    1. 客户端生成秘钥。

      若想上server1免密连接上server2,需要在server1上生成私钥和公钥,执行如下命令:

      ssh-keygen

      ssh-keygen默认使用RSA算法,长度为2048位,执行完后会在用户目录下的.ssh文件夹创建rsa密钥类型的一个公钥和一个私钥,如下图。

      图3 .ssh文件夹
    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。

    3. 测试免密连接。
      如下图所示,server1已经可以免密SSH登录server2了。按照上述步骤同样的方式,将server2的公钥发给server1,即可实现server2免密ssh登录server1,从而实现免密互联。
      图4 server1免密SSH登录server2

常见问题:

  • sshd启动时报错Loaded : error(Reason: No such file or directory)

    该报错说明当前容器中未安装ssh服务,执行如下命令安装:

    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。

support.huaweicloud.com/usermanual-modelarts-lite/usermanual-modelarts-lite-0228.html