本文带你了解ssh, 如何实现ssh免密码登陆? 如何使用ssh做端口转发, 跳板?

生成ssh key

本文以Linux为例, 其他平台可参照Github官方文档操作

  1. 生成2048位的密匙 passphrase 可以设置为空

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  2. 设置权限

    # .ssh directory: 700 (drwx------)
    chmod 700 .ssh
    # public key (.pub file): 644 (-rw-r--r--)
    chmod 644 .ssh/id_rsa.pub
    # private key (id_rsa): 600 (-rw-------)
    chmod 600 .ssh/id_rsa

服务器设置

  1. 将公匙用ssh-copy-id 命令传给服务器,实现ssh免密码登陆

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@serverip
  2. 服务器端设置/etc/ssh/sshd_config, 使得不能用密码登陆root用户

    cd /etc/ssh/sshd_config

    #修改配置
    PermitRootLogin yes
    PasswordAuthentication no
  3. 本地新建一个config文件,填入服务器信息,实现简化登陆

    touch ~/.ssh/config
    # config file
    Host name
    Hostname serverip
    User root
  4. 查看服务器ssh登陆日志

    scp name:/var/log/btmp btmp

    # 筛选日志信息, 实现显示 次数+ IP
    lastb -f btmp | awk '{print $3}' | sort | uniq -c | sort -nr | more

ssh高级操作

  1. 实现端口转发,将服务器用作代理访问其他网站

    命令: ssh -N -f -L \<local port>:\<remote host>:\<remote port> \<SSH hostname>

    这样就将IP为remote host机器的remote port通过中间服务器映射到本地机器的localport

    解释:
    -N 指这个连接不需要执行任何命令。仅仅做端口转发
    -f 在后台运行
    -L 做本地映射端口,被冒号分割的三个部分含义分别是
    需要使用的本地端口号
    ​需要访问的目标机器IP地址
    需要访问的目标机器端口

  2. 将私匙添加到ssh-agent,避免每次都要输密码

    # start ssh-agent
    eval "$(ssh-agent -s)"
    # add ssh key
    ssh-add ~/.ssh/id_rsa
  3. 跳板登陆
    本地A, 跳板服务器B, 目标服务器C

    首先将本地A均可以ssh登陆B和C

    当连接服务器B时,使用ssh -A命令, 以打开agent forwarding

    当服务器B连接服务器C时, 就不用再输密码了, 相当于这台服务器充当了转发信息的功能,把私钥操作的request转发到了本机的agent, 然后再将agent的response原路返回

转载申请

知识共享许可协议

本文知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接