缘起

平时实验需要在 HPC 上进行一些计算,而那些比较占空间的结果则会存储在 lab server 上。照理说,在这三处转移数据,使用 rsync 命令的话,应该是十分方便快捷的。然而由于总是不能成功设置密钥,这些愉快的操作总是会被密码输入框打断。今天仔细研究了一下这个问题,终于可以成功进行免密远程登录了。

步骤

在本机生成公私密钥

  • 在本机使用 ssh-keygen~\.ssh 生成公私密钥对 id_rsaid_rsa.pub

    1
    
    $ ssh-keygen -t rsa
  • 如若后续步骤出错,建议将权限设置为

    1
    2
    3
    4
    
    $ chmod 755 ~/
    $ chmod 755 ~/.ssh/
    $ chmod 600 ~/.ssh/id_rsa
    $ chmod 644 ~/.ssh/id_rsa.pub

    将公钥添加至 server 并添加入 authorized_keys

  • 有两个方法,一是使用 ssh-copy-id 命令

    1
    
    $ ssh-copy-id -p 22 username@hostname

    可使用 brew install ssh-copy-id 来安装此偷懒命令

  • 二是手动将公钥复制到 server

    1
    
    $ scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/

    并登录远程主机,将公钥添加至 authorized_keys

    1
    
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • 如果遇到 Permission denied,可登录 server,确认自己拥有 execute permission 并移除 group 与 others 的权限

    1
    
    $ chmod 600 ~/.ssh/
  • 如果还是需要输入密码,可修改 server 上的公钥权限

    1
    
    $ chmod 600 ~/.ssh/authorized_keys

    在本机配置偷懒简写

    1
    
    $ vi ~/.ssh/config
    1
    2
    3
    4
    5
    
    Host shortname
    User username
    HostName hostname
    Port 22
    IdentityFile ~/.ssh/id_rsa

    心得

    对于免密登录来说,顺利的话可能只需要使用 ssh-keygenssh-copy-id 命令并修改配置文件。然而权限设定十分 tricky,稍有不慎便会像自己之前一样或添加公钥失败或设置完了还得输密码。