1# @Time : 2020-04-13
2# @Language: Markdown
3# @Software: VS Code
4# @Author : Di Wang
5# @Email : [email protected]
关于ssh的配置
每天都要通过ssh登陆远程主机,所以一些偷懒的配置是必不可少的。ssh是基于非对称加密的RSA算法,连接过程也包括了host的认知,user的认证几个过程,这些知识包含很多密码学的内容,有很多博客都有讲。我就单记录一下自己的一些配置。
ssh公钥认证和代理转发
基本逻辑是将client的公钥存储在远程host上,以后连接时候就不用输入host的账户密码了。
首先用ssh-keygen
生成client机器上的密钥对:
1$ ssh-keygen -t rsa -b 4096 -C "[email protected]" -f ~/.ssh/id_rsa -P ''
其中-t
指定密钥类型,-b
指定密钥长度,-C
指定注释,-f
指定私钥文件,-P
指定私钥的密码,这里设置为不需密码
然后用ssh-copy-id
,把公钥发送到远程主机上。
$ ssh-copy-id [-i [identity_file]] [user@]machine
如果有多个密钥对或者没有使用默认公钥路径,就要用-i
参数指定,公钥会存储在远程host的user home目录下的~/.ssh/authorized_keys
这样以后再登陆就不需要输入密码了,当然如果设置了私钥的密码passphrase
,还是需要输入的。
当client有多个密钥对时,即使分发了自己的公钥到不同的host,client也不知道要读取哪一个私钥文件id_rsa
,所以还是要使用ssh -i key
选项去指定要配对的私钥文件。所以就有了引入ssh-agent
的需求,它就可以记录哪一个私钥对应哪些远程主机。
运行ssh-agent
$ eval "$(ssh-agent -s)"
之后查看环境变量是否有SSH_AUTH_SOCK
和SSH_AGENT_PID
,如果导入了,就说明运行成功
完成。
基于ssh的一些命令
基本的ssh命令,一些常用的参数:
1ssh [option] [user]@[hostname] [command]
2
3-A :开启ssh agent forwarding,不安全,官方建议在确信远程主机可靠的情况下再开启。(等下会讲什么是agent forwarding)
4-a :关闭ssh agent forwarding
5-b bind_address :系统有多个IP时可以绑定用于ssh的地址
6-E log :debug日志输出文件
7-F config :配置文件,默认为~/.ssh/config
8-i key :指定私钥文件,默认为~/.ssh/id_rsa
9-l username :指定登陆的用户名
10-p port :指定端口号
11-t :强制分配伪终端
12-X :开启X11 forwarding,同样,可能被攻击。
13-Y :开启trusted X11 forwarding。和`-X`的区别,有安全方面的考虑,也有历史遗留的因素,建议使用-X。
scp
scp是基于ssh的文件传输命令。