我们通常使用 SSH 进行远程服务器控制,但是似乎都是很 simple,很 naive 的东西。 这并不 hack,所以这里会介绍一些有点 hack 的东西。
ssh-keygen
[-t dsa | ecdsa | ed25519 | rsa]
: 密钥种类-F hostname [-f known_hosts_file] [-l]
: 搜索给定主机对应密钥-R hostname [-f known_hosts_file]
: 在known_hosts
中删除给定主机
ssh-copy-id
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
-f: force mode -- copy keys without trying to check if they are already installed
-n: dry run -- no keys are actually copied
-h|-?: print this help
将 ssh 公钥拷贝到目标服务器(的 .ssh/authorized_keys
)
.ssh/config
这其实不属于 hack,但是确是很多的前提。这里给个模板
Host server
User billchenchina
HostName 192.0.2.0
Port 60022
IdentityFile /home/billchenchina/.ssh/id_rsa
ForwardAgent yes
AddKeysToAgent yes
PermitLocalCommand no
ProxyCommand nc -X connect -x 127.0.0.1:8080 %h %p # HTTP Proxy
# 或
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p # Socks5 Proxy
ProxyJump billchenchina@192.0.2.254:22
TCPKeepAlive yes
ssh-agent
之前看到过很多关于 ssh-agent
的好,但是可惜年少轻狂并不懂。这个学期认真搞了一下 ssh-agent:
在笔记本(WSL)上,我的 ssh-agent
是通过在 ~/.bash_profile
中 eval `ssh-agent`
的方式进行加载的。
使用 ssh-agent
能够让我少输几次密钥的密码 XD。
对于 GNOME,gnome-keyring
能够让你在同一次登录时少输多次 ssh-add
,也不需要手动管理 ssh-agent
就很香(但是要记得人走锁屏hhh)
检查 ssh-agent
中的密钥:ssh-add -l
(fingerprints) 或 ssh-add -L
(public key parameters)
删除 ssh-agent
中的密钥:ssh-add -D
(Delete all identities)
SSH Forwarding
有三种 forward:local forward、remote forward、dynamic forward。
-
local forward:把指定的服务器+端口映射到本地
例:
ssh -L 8080:192.0.2.1:80 192.0.2.0
时,127.0.0.1:8080 等价于 192.0.2.1:80 -
remote forward:把指定的服务器+端口映射到服务器
例:
ssh -R 8080:192.0.2.1:80 192.0.2.0
时,192.0.2.0:8080 等价于 192.0.2.1:80 -
dynamic forward:在本机建立 SOCKS 服务器 例:
ssh -D 1080 192.0.2.0
时,127.0.0.1:1080 为 SOCKS 服务器。
ssh-keyscan
ssh-keyscan [-46cDHv] [-f file] [-p port] [-T timeout] [-t type] [host | addrlist namelist]