Openssh 常见用法
用法:
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
常见参数:
- -D: 绑定本地端口
- -F: 指定config文件的位置
- -l: 登录用户名
- -p: 远程端口
- -N: 只转发端口,不执行远程命令,proxy时的常用参数
- -i: key的解密文件路径,通常指~/.ssh/id_rsa ~/.ssh/id_ecdsa ~/.ssh/id_dsa
- -C: 压缩传输
- -c: 选择用于加密连接的加密方式
- -1: 只使用protocol 1连接
- -2: 只使用protocol 2链接
- -4: 只使用ipv4链接
- -6: 只使用ipv6链接
创建密钥对
推荐 ed25519,已在 OpenSSH 6.5 中加入支持
ssh-keygen -t ed25519 -C "[email protected]"
ssh-keygen -t rsa -b 4096 -C "[email protected]"
ssh-keygen -t ecdsa -b 521 -C "[email protected]"
验证公钥指纹
ssh-keygen -E md5 -lf ~/.ssh/your_pubkey
从私钥创建公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/your_pubkey
修改私钥口令
ssh-keygen -p -f ~/.ssh/your_pubkey
重新生成服务器密钥
rm -v /etc/ssh/ssh_host_*
ssh-keygen -A
systemctl restart ssh
或者手动生成各自需要的服务器密钥
ssh-keygen -q -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -q -N "" -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
systemctl restart ssh
debian 用户可以用如下方式
rm -v /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server # debian
systemctl restart ssh
普通的登录
ssh user@remotehost
or
ssh -l user remotehost
一般而言,对于常用参数,我们将之写入到 .ssh/config
文件中是个很常用的做法
Host hostname
IdentityFile ~/.ssh/your-private-key
HostName ip or domain
Port port
User username
Host *
Compression yes
如此,连接的时候只要如下即可
ssh hostname
proxy
ssh -C -N -D localport username@hostname -p remoteport
mount
sshfs -p remoteport user@localhost:/remotepath localpath
将远程主机的 remotepath 挂载到本地 localpath
umount
fusermount -u localpath
卸载挂载文件
scp
上传本地 file 到远程的 remotepath
scp localpath/file user@localhost:/remotepath
下载远程 file 文件到本地
scp username@localhost:/remotepath/file localpath
传输远端服务器文件给另一个远端服务器,通过本地
scp -3rp user1@host1:/path/file user2@host2:/path/
ssh-agent
ssh-agent 一般人用不到,不过还是挺有用的,概念不介绍了。用法也是很简单,Mac 用户编辑 .ssh/config
文件
Host host1
IdentityFile ~/.ssh/your-private-key
HostName ip/domain
ForwardAgent yes
Port port
User username
Host *
AddKeysToAgent yes
UseKeychain yes
Protocol 2
Compression yes
ProxyCommand
不过,并不是所有的机子的公钥是一致的,但是有不得不使用其中一台作为跳板,那么我们就使用这个参数了
Host host1
IdentityFile ~/.ssh/your-private-key1
HostName ip1/domain1
Port port1
User username1
Host host2
IdentityFile ~/.ssh/your-private-key2
HostName ip2/domain2
port port2
User username2
ProxyCommand ssh host1 -W %h:%p
如此,直接 ssh host2
时,是通过host1作为跳板的,当然,如果只是临时的话,就没必要配置 ~/.ssh/config
了,直接命令行
ssh username@target_ip -p port -o ProxyCommand='ssh host1 -W %h:%p'
也能临时达到要求,至于记不住参数什么的,直接 alias 吧。