本篇包含对ssh使用的一些基本记录。主要目标有:
- ssh连接其他主机
- ssh免密登录
- 修改ssh默认端口
- 配置ssh的快捷方式
ssh连接其他主机
基本用法:
ssh username@host
举例:1
2
3
4
5
6▶ ssh root@192.168.56.103
The authenticity of host '192.168.56.103 (192.168.56.103)' can't be established.
ECDSA key fingerprint is SHA256:sygnQ16jnrrT77XLeemwuuzZEsdIhKCK8zxyKE36CXI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.103' (ECDSA) to the list of known hosts.
root@192.168.56.103's password:
提示输入密码就能连接了。
如果host更改了ssh连接的端口,用-p参数来指定:1
ssh root@192.168.56.103 -p 1234
ssh免密登录
ssh免密登录的方式就是使用ssh的密钥文件登录。阿里云服务器推荐使用密钥对的方式来连接,只要启用了密钥对,ssh的密码连接就会被禁用,毕竟密钥文件登录相对更加安全些。阿里云密钥对也没做什么事,就是把密钥对的公钥文件放入了服务器的~/.ssh/authorized_keys文件中,然后让你下载密钥对的私钥文件进行ssh连接。它作为云服务商,提供密钥对的功能,方便你批量管理多个服务器。
ssh指定私钥文件进行连接的方式:1
ssh -i ./aliyun.pem root@192.168.56.103 -p 12345
使用了私钥文件进行ssh连接,是不需要再输入要连接的目标主机用户的密码的。但是如果密钥文件签发时,指定了密钥文件的打开密码的话,那就另当别论了,ssh命令会再提示你输入这个密钥文件的打开密码。
ssh的密钥文件的签发方式,以及如何放入目标主机的authorized_keys文件中,在使用scp命令进行文件传输有详细介绍说明。
另外,如果是从本机生成的密钥文件(放置在本机的~/.ssh中的),放入了目标主机的~/.ssh/authorized_keys文件中,则本机与目标主机进行ssh连接时,不需要显示地用i参数指定私钥文件。所以想要更方便地在本机连接其他服务器时,只需要把自己的ssh公钥文件放置到目标主机的authorized_keys文件中,就能更简单地使用ssh。
修改ssh的端口
三步。
第一,编辑sshd的配置文件1
vim /etc/ssh/sshd_config
找到Port然后进行修改。1
2
3
4
5
6
7
8# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 12345
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
第二步,通过iptables开放上一步指定的端口1
2iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT
service iptables save
第三步,重启sshd1
/sbin/service sshd restart
最后测试下是否能用新端口连接:1
2
3▶ ssh root@192.168.56.103 -p 12345
Last login: Sun Jun 16 21:43:39 2019 from gateway
[root@localhost ~]#
配置ssh的快捷方式
这部分记录的是如何通过ssh的别名来简化ssh连接。
查看~/.ssh目录下是否有config文件,没有则新建一个:1
2
3
4
5
6~/.ssh
▶ ls
id_rsa id_rsa.pub known_hosts
~/.ssh
▶ touch config
按如下格式往config文件里面加入ssh连接的配置信息:1
2
3
4
5Host my
HostName 192.168.56.103
User root
Port 12345
IdentityFile ~/.ssh/id_rsa
其中:Host指定的是ssh连接的别名,下面会介绍它的用处。HostName指定连接的目标主机,User指定连接的目标主机用户,Port指定连接的端口,IdentityFile指定连接用到的ssh私钥文件地址(等价于ssh连接时的-i参数)。
以上配置好以后,my这个连接,就可以如下的简化使用:1
2
3▶ ssh my
Last login: Sun Jun 16 21:43:44 2019 from gateway
[root@localhost ~]#
如果ssh启用了密钥文件连接,但是密钥文件有密码的话,不能把密码配置在ssh的config文件里面。所以即使是简化方式连接,也会提示要输入密码:1
2▶ ssh aliyun
Enter passphrase for key '/Users/administrator/liuyunzhuge/ssh/aliyun.pem':
要把这个密码也简化使用的话,需要用到ssh-add这个工具。它会把密钥文件的密码加入到authentication agent中管理。
添加密钥文件的密码:1
2
3ssh-add /Users/administrator/liuyunzhuge/ssh/aliyun.pem
Enter passphrase for /Users/administrator/liuyunzhuge/ssh/aliyun.pem:
Identity added: /Users/administrator/liuyunzhuge/ssh/aliyun.pem (/Users/administrator/liuyunzhuge/ssh/aliyun.pem)
第一次添加时,会要求输入一次密钥文件的密码。加入完成之后,再运行ssh aliyun就不用再输入密码了。
ssh-add还有其它的操作来管理这些密码。1
2
3
4
5
6
7ssh-add -D 删除所有管理的密钥
ssh-add -d 删除指定的
ssh-add -l 查看现在增加进去的指纹信息
ssh-add -L 查看现在增加进去的私钥
根据需要选择是否要用,用的时候再来尝试。
补充
ssh-add是session级别的暂存密钥文件的密码,电脑重启后就失效了。mac os下提供了新的方式来持久化存储密码,在config文件中,可以加入UseKeychain yes启用keychain来存储密钥文件的密码,只要用户输入过一次密码,这个密码就会被存入keychain,重启后不用重新再输入密码。