public:it:ssh

ssh

  • 默认安装有客户端 openssh-client, 服务端需手动安装 sudo apt-get install openssh-server;
  • 服务名 ssh,服务进程名sshd
  • 服务端配置文件 /etc/ssh/sshd_config; 客户端配置文件 /etc/ssh/ssh_config
  • 通过 key 登陆:
    • 客户端生成私钥与公钥 ssh-keygen -t rsa
    • 把公钥加到服务端的 ~/.ssh/authorized_keys文件里, 或在客户端使用命令:
      ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostip
  • 禁用密码登录:
    • 编辑/etc/ssh/sshd_config,设置此项为no
      PasswordAuthentication no
    • 重启 sshd 服务
  • 欢迎词:动态生成后位于cat /run/motd.dynamic.
    • 彩色标题词:可先安装sudo apt install figlet toilet,再编辑/etc/update-motd.d/00-header, 添加 toilet -f standard -F metal oakfire
  • 如果 openssh 版本不低于 8.8, 有可能禁用 RSA-1 算法导致 key 失效,详见 此说明, 在参数添加 -vvvv 开启日志的ssh 中可见
    debug1: send_pubkey_test: no mutual signature algorithm

    , 解决办法是用 ed25519 来生成公私钥

    ssh-keygen -t ed25519 -C "your_email@example.com"
  • 远程使用 SSH 时,直接使用本地的 key 的方法: using ssh agent forwarding
    • 假设 A ⇒ B ⇒ C,现在要达到在 B ⇒ C 时使用 A 的 key.
    • 要求 A 的 ssh_config 开启选项 ForwardAgent
    • 要求 A 的 ssh-agent 在运行,并有 key , 可用 ssh-add -L检查, 如果没有,则添加 ssh-add yourkey
    • 要求 B 的 sshd_config开启选项AllowAgentForwarding
    • A ⇒ B 时,使用ssh -A example.com 来手动 agent forwarding;
    • 或者在配置里配置登陆 B 时自动开启 agent forwarding;
            Host example.com
              ForwardAgent yes
  • 如果在 windows 上使用 ssh 登陆到 A,然后想进行 A ⇒ B ⇒ C 的 agent forwarding, 在 ssh-add这一步时会提示一个错误(忘了叫什么),stackoverflow 有个高票解答能解决此问题: 执行
     eval `ssh-agent -s` 
  • SSH隧道与端口转发及内网穿透
    ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host 
    ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host 
    ssh -C -f -N -g -D listen_port user@Tunnel_Host
  • Windows: 编辑 C:\Users\<username>\.ssh\config 文件,添加
    Host <host>
        ProxyCommand connect -S 127.0.0.1:1080 %h %p

    其中 <host> 可为 * 表示不限目标ip, 或者可设置为特定的 ip 或域名,比如 github.com; 第二行的127.0.0.1:1080 可改为实际代理地址; connect为git mingw64自带, 所以在git bash 里可用, 如果没有则需要自行下载 connect.exe 放到 PATH 路径。

  • Linux:编辑 ~/.ssh/config, 添加
    Host <host>
        ProxyCommand  nc -X 5 -x 127.0.0.1:1080 %h %p
  • 如果只是单次使用,可直接在执行命令时添加: ssh <user>@<host> -o “ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p”
# 生成 RSA 私钥(传统格式的)
openssl genrsa -out rsa_private_key.pem 1024
 
# 生成 RSA 公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 
 
# 将传统格式的私钥转换成 PKCS#8 格式的
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
  • public/it/ssh.txt
  • 最后更改: 2023/05/25 14:42
  • oakfire