public key

vim ~/.ssh/authorized_keys

ssh config

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vim ~/.ssh/config
#---
Host *
    # ssh multiplexing
    ControlMaster auto
    ControlPath   ~/.ssh/master-%r@%h:%p
    ControlPersist 10m
    # ssh agent forward
    ForwardAgent yes
    # 默认用户
    User root

Session Multiplexing

https://blog.wiloon.com/?p=16030

ssh agent

1
2
#查看本地SSH agent
ssh-add -L

ssh agent forward

https://blog.wiloon.com/?p=16034

指定源端口

1
ssh -o 'ProxyCommand nc -p 2345 %h %p' $MY_SERVER

查看ssh上已经连接的用户、session

who or w. who -a

netstat -tnpa | grep ‘ESTABLISHED.*sshd’

ps auxwww | grep sshd:

ps ax | grep sshd

sshd

maxstartup

这个是限制处于联机页面的连接数,默认值10。联机页面就是当你登录ssh时,还没输入密码的页面。

三元组形式

10:30:60

10:当连接数达到10时就开始拒绝连接,不过不是全部拒绝,我们继续往下看

30:当连接数到达10时,之后的连接有30的概率被拒绝掉

60:当连接数达到60时,之后的连接就全部拒绝了

一个数字的形式

我们可以直接 写个60,这样言简意赅,连接数达到60之前敞开玩,达到60后就不能玩了。

maxsessions

同一地址的最大连接数,也就是同一个IP地址最大可以保持多少个链接

https://blog.csdn.net/u014686399/java/article/details/84778292

使用通配符 (wildcard)

1
2
3
4
5
vim .ssh/config

host 192.168.*
    user root

SSH 参数配置有3个层次:

命令行参数,如-p 10086, -i /path/to/identity_file 等选项来设置SSH的端口号或认证证书位置

针对某个用户的配置文件,所在路径为~/.ssh/config,默认是不存在的,需要手动创建

针对系统所有用户的配置文件,,所在路径为/etc/ssh/ssh_config

参数重要性的顺序也是1>2>3,即越近的配置重要性越高。

用户配置文件在 ~/.ssh/config, 没有的话新建一个

Host 名称(自己决定,方便输入记忆的)

HostName 主机名

Port 22

User 登录的用户名

IdentityFile 证书文件路径

Host

Host配置项标识了一个配置区段。

ssh配置项参数值可以使用通配符:*代表0~n个非空白字符,?代表一个非空白字符,!表示例外通配。

我们可以在系统配置文件中看到一个匹配所有host的默认配置区段:

Host *

这里有一些默认配置项,我们可以在用户配置文件中覆盖这些默认配置。

1
2
3
4
5
host router
     HostName 192.168.1.1
     Port 22
     User root
     IdentityFile ~/.ssh/id_rsa

使用ssh的配置文件可以在很大程度上方便各种操作,特别适应于有多个ssh帐号、使用非标准端口或者写脚本等情况。

man ssh_config

可以查看手册

如果之前是用密码方式来登录ssh,需要先改用证书方式。可以看最后面生成SSH证书

两个SSH帐号,一个是github的,一个是其他服务器的,证书文件正如其名,那么可以这样写

Host github.com

HostName github.com

User git

IdentityFile ~/.ssh/github

注意,github的Host必须写成”github.com”。你可以会有其他要求,比如指定端口号、绑定本地端口,这些都可以通过man来查询,比如

Port 端口号

DynamicForward 本地端口号

如果服务器同时有ipv4/ipv6地址,HostName使用域名会比较方便

使用

有了这些配置,很多操作就非常简化了。比如登录服务器

ssh server

传输文件

scp server:~/test .

如果使用Putty等工具,可能需要一些其他操作(转换私钥格式,貌似),自行搜索吧

生成SSH证书

登入服务器端,生成密钥(你使用哪个用户名登录,就在哪个用户名下生成)

ssh-keygen -t rsa

会询问将密钥放在何处,默认即可。然后是输入密码,留空(否则你登录不仅需要私钥还要输入密码)。

完成后在~/.ssh目录下会生成另个文件id_rsa、id_rsa.pub,一个私钥一个公钥。接着执行

cd ~/.ssh

cat id_rsa.pub » authorized_keys

chmod 600 authorized_keys

再将id_rsa取回本地,放入~/.ssh并将权限设为400。

服务器端,删掉这两个文件,并修改sshd配置。编辑/etc/ssh/sshd_config如下

PubkeyAuthentication yes

PasswordAuthentication no

之后重启sshd服务

https://vra.github.io/2017/07/09/ssh-config/

http://www.lainme.com/doku.php/blog/2011/01/%E4%BD%BF%E7%94%A8ssh_config