登录 |
  • 注册
  • 无密码访问

    2009年06月30日 上午 43:46 | 作者:pangyt

    == Yahoo用户无密码ssh链接配置 ==
    === 配置步骤 ===
    在雅虎内部特殊用户yahoo经常被用作批处理帐户进行一些后台远程操作,但要在ssh链接上无密码使用yahoo用户则需要配置一番。

    假设有主机hostA和hostB,现需要从hostB以yahoo用户身份连接到hostA执行一些命令cmd,即:

    hostB ---SSH登录---> hostA(运行命令cmd)
    

    则可按以下步骤进行配置:

    1. 在随意一台有yahoo用户的主机上以yahoo用户身份生成无passphrase的RSA公私钥对。这里我们以在hostB上生成为例:

    xxx@hostB:~$ sudo -u yahoo ssh-keygen -f /tmp/id_rsa -t rsa -P ''
    

    以上命令生成的公钥在/tmp/id_rsa.pub中,私钥在/tmp/id_rsa中;

    2. 将生成的RSA私钥文件复制为hostB上的/home/yahoo/.ssh/id_rsa文件(或identity文件),并将生成的RSA公钥文件分发到hostA上的/home/yahoo/.ssh/authorized_keys文件里:

    xxx@hostB:~$ sudo mv /tmp/id_rsa /home/yahoo/.ssh/id_rsa
    xxx@hostB:~$ sudo scp /tmp/id_rsa.pub xxx@hostA:
    # 在hostA上
    xxx@hostA:~$ sudo sh -c "cat /home/xxx/id_rsa.pub >> /home/yahoo/.ssh/authorized_keys"
    

    这里要确保公私钥文件以及yahoo用户目录的权限正确:

    xxx@hostB:~$ sudo chown yahoo:users /home/yahoo/.ssh/id_rsa
    xxx@hostB:~$ sudo chmod 700 /home/yahoo/.ssh/id_rsa
    xxx@hostB:~$ sudo chmod 700 /home/yahoo
    # 在hostA上
    xxx@hostA:~$ sudo chown yahoo:users /home/yahoo/.ssh/authorized_keys
    xxx@hostA:~$ sudo chmod 755 /home/yahoo/.ssh/authorized_keys
    xxx@hostA:~$ sudo chmod 700 /home/yahoo
    

    3. 确保hostA上的/usr/local/bin/push脚本存在且权限正确:

    xxx@hostA:~$ sudo chmod 755 /usr/local/bin/push
    

    4. 确保hostA上的sshd监听了2222端口:

    xxx@hostA:~$ sudo lsof -i:2222
    ...
    sshd-2222 2510 root    3u  IPv6   5394       TCP *:2222 (LISTEN)
    

    5. 现在应该就能在hostB上以yahoo用户身份从2222端口无密码ssh链接到hostA运行命令了:

    xxx@hostB:~$ sudo -u yahoo ssh -p 2222 hostA "ls /"
    

    以上的步骤是保留私钥分发公钥来实现无密码ssh链接,适用于hostB需要无密码链接到包括hostA在内的很多台其他主机进行操作的场合;当hostA需要接受来自很多台其他主机的无密码ssh链接时,在这些主机上逐一生成公私钥对并将一堆公钥放到hostA上是很麻烦的,此时就可以采取保留公钥分发私钥的策略了,即将一个公私钥对中的公钥保留在hostA上的authorized_keys文件里,而将私钥逐个分发到需要链接到hostA的其他主机上,具体的步骤大同小异,此处不再赘述。

    === 出现问题的解决方法 ===
    # 在发起链接一方(hostB)的ssh增加-v选项显示额外调试信息,在接受链接一方(hostA)查看/var/log/all日志,观察可能存在的问题;
    # 若链接时总是提示输入密码,可能的原因有:
    ## 公私钥对没有以yahoo用户身份生成;
    ## 公私钥对没有以正确的格式生成,请确保使用rsa而不是rsa1格式生成公私钥对;
    ## 公私钥对生成时没有使用空的passphrase,请确保用-P ”或者在提示输入passphrase时直接回车来保证公私钥对没有passphrase;
    ## 发起链接一方的私钥文件/home/yahoo/.ssh/id_rsa权限不对,请确保其权限为yahoo:users 700
    ## 接受链接一方的公钥文件/home/yahoo/.ssh/authorized_keys权限不对,请确保其权限为yahoo:users 755
    ## 发起或接受链接一方的yahoo用户目录权限不正确,请确保yahoo用户目录权限为yahoo:users 700
    # 若链接时提示/usr/local/bin/push: Permission denied,则表明yahoo用户所用的push shell权限不对,请确保/usr/local/bin/push文件的权限为755

    发表评论

    *必填

    *必填 (不会被公开)