ssh连接基本使用要点

本篇包含对ssh使用的一些基本记录。主要目标有:

  1. ssh连接其他主机
  2. ssh免密登录
  3. 修改ssh默认端口
  4. 配置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
2
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT 
service iptables save

第三步,重启sshd

1
/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
5
Host 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
3
ssh-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
7
ssh-add -D 删除所有管理的密钥

ssh-add -d 删除指定的

ssh-add -l 查看现在增加进去的指纹信息

ssh-add -L 查看现在增加进去的私钥

根据需要选择是否要用,用的时候再来尝试。

补充
ssh-add是session级别的暂存密钥文件的密码,电脑重启后就失效了。mac os下提供了新的方式来持久化存储密码,在config文件中,可以加入UseKeychain yes启用keychain来存储密钥文件的密码,只要用户输入过一次密码,这个密码就会被存入keychain,重启后不用重新再输入密码。