欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

搞定SSH常用参数和操作技巧

最编程 2024-08-03 13:43:53
...

    ssh(Secure Shell)是一种加密的网络传输层协议,它代替了传统的telnet协议,可以帮助我们实现安全的远程登录,进行加密通信。具体的软件实现包括dropbear和OpenSSH,其中,OpenSSH在CentOS 默认安装,Ubuntu在安装时需要选择​(如下图)​,否则安装完无法直接使用远程登录。

总结ssh常用参数、用法_centos

    ssh分为服务器端和客户端两种,执行​ ls /etc/ssh​ 命令可看到ssh_config和sshd_config,前者为客户端的配置文件,后者为服务器端的配置文件​(如下图)​,我们这里所谈的ssh指的是客户端的,此篇主要是结合ssh的一些常用功能来总结其参数和用法。

总结ssh常用参数、用法_centos_02


  1. 远程登录主机

    ssh最常用的功能之一就是实现远程登录主机,实现方式有两种,一种是ssh直接跟上目标主机的ip,另一种则是ssh跟上指定主机ip上的用户登录。

1.1 ssh加ip登录

    ssh直接跟目标主机ip等登录时,会默认以当前的用户名称作为目标主机的用户去登录,如果目标主机不存在该名称的用户,则无法登录,如果存在,输入目标主机的用户mi码后可登录​(如下图)​。

总结ssh常用参数、用法_centos_03

总结ssh常用参数、用法_远程登录_04

    ssh能实现加密通信,不过首次连接时的安全性是无法保证的,如果有中间人的存在,发了一份假的公钥,则我们后续的连接也是不安全的,所以可以在首次连接时进行验证。但是连接时提供的目标主机公钥是经过哈希算法加密过的,一般人看不懂,有个很简单的方法就是目标主机自己连接自己,将显示出的经过哈希算法加密的公钥与ssh客户端进行对比​(如下图)​。

总结ssh常用参数、用法_centos_05

总结ssh常用参数、用法_远程登录_06

1.2 ssh指定用户登录

    ssh也可根据目标主机上已有的用户,进行指定用户名+ip的方式登录,如果之前已经连接过目标主机,再次连接时只需输入目标主机中的指定用户登录mi码即可​(如下图)​。

总结ssh常用参数、用法_远程登录_07

1.3 首次登录免公钥确认

    上面谈到首次连接时需要进行公钥的确认,输入“yes”,如果企业内部不使用外网,连接时的安全性会有所增加,一台台机器去确认公钥会比较麻烦。不想进行公钥的确认也可以实现,ssh客户端的配置文件为/etc/ssh/ssh_config,找到“StrictHostKeyChecking ask ”,将ask改为no即可​(如下图)​。

总结ssh常用参数、用法_centos_08

总结ssh常用参数、用法_远程登录_09

    另一种方法是不修改配置文件,加上-o来执行命令完成免公钥确认​(如下图)​。

总结ssh常用参数、用法_远程登录_10

总结ssh常用参数、用法_远程登录_11

1.4 远程执行命令和脚本

    ssh可以帮我们在不切换到目标主机的情况下,远程执行命令​(如下图)​。

总结ssh常用参数、用法_centos_12

    同时我们也可远程执行脚本,笔者以centos7.9为客户端,创建一个脚本内容很简单,就是新建a.txt,执行 ​ssh 10.10.10.154 /bin/bash < ssh.sh​ 命令,即可在名为hello-world的目标主机看到多出指定名称文件​(如下图)​。

总结ssh常用参数、用法_客户端_13

总结ssh常用参数、用法_客户端_14


  1. 指定端口号登录

    ssh远程登录时,默认的端口号为22,在实际生产过程中可能会不太安全,这时我们可以考虑更换端口号。linux系统端口号范围为0-65535,其中0不使用;1-1023 由系统保留,只能由root用户使用;1024-4999 由客户端程序*分配;5000-65535 由服务器端程序*分配。修改端口号需要修改/etc/ssh/sshd_config配置文件信息,找到“Port 22”改为想要的数字,笔者这边以9527为例​(如下图)​,修改保存后,需执行 ​service sshd restart​ 命令生效。

总结ssh常用参数、用法_远程登录_15

    此时,如果客户端是无法直接连接的,必须加上-p和端口号才能登录​(如下图)​。

总结ssh常用参数、用法_客户端_16


  1. 强制伪终端分配

    强制伪终端分配这一功能有点类似于跳板,比如客户端C想去登录服务器端S,而S屏蔽掉了C的ip,C是无法直接登录S的。如果此时中间有一个A的存在,A能够正常连接到S,并且C能够连接到A,则能实现C→A→S的登录。

    笔者这边准备三台虚拟机,ip地址分别为10.10.10.153-155,153结尾的主机名为LeoMessi,现在Messi想登录155结尾的目标主机centos7.9,但是centos7.9屏蔽了Messi的ip,Messi直接登录不可实现​(如下图)​。

总结ssh常用参数、用法_远程登录_17

总结ssh常用参数、用法_远程登录_18

    此时有一个名叫hello-world的主机存在,可以远程登录centos7.9,而Messi可以远程登录hello-world​(如下图)​。

总结ssh常用参数、用法_客户端_19

总结ssh常用参数、用法_centos_20

    此时,我们在已经登录到hello-world主机上的Messi可以执行 ​ssh 10.10.10.155​ 命令,实现伪终端的强制登录​(如下图)​。

总结ssh常用参数、用法_客户端_21

    当然这样的登录方式会比较麻烦,我们可以使用-t,直接一条命令实现登录,即执行 ​ssh -t 10.10.10.154 ssh 10.10.10.155​ 命令​(如下图)​。

总结ssh常用参数、用法_远程登录_22


  1. scp和rsync

4.1 scp

    scp命令是ssh客户端常用的命令之一,它可以帮助我们实现远程拷贝功能。笔者这边准备两台虚拟机,分别名为hello-world和centos7.9,hello-world将/data/test下的三个文件远程拷贝给centos7.9,执行 ​scp -r /data/test/ 10.10.10.155:/data​ 命令,此时centos7.9查看/data目录,发现过了/test文件夹,并且里面包含了指定文件​(如下图)​。

总结ssh常用参数、用法_远程登录_23

总结ssh常用参数、用法_centos_24

4.2 rsync

    现在hello-world对f1.txt进行了更改,还是使用之前的命令,从centos7.9上的文件生成时间可以看出会重新覆盖centos7.9上的三个文件,即所有的文件都重新传输一遍​(如下图)​。

总结ssh常用参数、用法_远程登录_25

总结ssh常用参数、用法_客户端_26

    如果是在生产中,文件内容比较大,使用scp来更新数据会比较麻烦,此时就可以用上rsync命令。rsync基于增量数据同步,即只复制两方不同的文件。执行 ​rsync -a /data/test 10.10.10.155:/data​ 命令,对比hello-world和接收者centos7.9对应文件夹下的文件生成时间,可见是相同的​(如下图)​。

总结ssh常用参数、用法_远程登录_27

总结ssh常用参数、用法_远程登录_28

    此时我们对hello-world主机上的f2.txt进行更改,执行 ​rsync -av /data/test 10.10.10.155:/data​ 命令​(v选项可看到更新细节)​,显示只传输了f2.txt,即其他文件没有进行传输,回到centos7.9主机上查看test文件夹下,也确实只有f2.txt的时间发生了变动​(如下图)​。

总结ssh常用参数、用法_centos_29

总结ssh常用参数、用法_远程登录_30

    可见,rsync在远程数据更新时确实比scp更实用。当然,如果我们在本地主机上删除了某个文件,直接使用上述命令是无法同步的。比如现在对hello-world对f3.txt进行了更改,同时删除了f1.txt,直接上一步的同步命令,只能对centos7.9中的f3.txt进行更新,而不能删除其f1.txt​(如下图)​。

总结ssh常用参数、用法_客户端_31

总结ssh常用参数、用法_客户端_32

    要想保证对方也同步删除,还需加上--delete。我们再对f2.txt进行更改,同时执行 ​rsync -av --delete /data/test 10.10.10.155:/data​ 命令,显示删除了对方的f1.txt,同时对f2.txt进行了数据更新​(如下图)​。

总结ssh常用参数、用法_客户端_33

总结ssh常用参数、用法_centos_34


  1. sftp

    sftp是一种交互式文件传输工具,用法和传统的ftp工具相似,利用ssh服务实现安全的文件上传和下载。

    笔者以hello-world主机为客户端,centos7.9为例,执行 ​sftp 10.10.10.155​ 命令,远程登录操作,可以查看主机相关文件等,如果是查看本机情况,需要在命令前加!,同时可实现上传和下载等功能​(如下图)​。

总结ssh常用参数、用法_客户端_35


  1. 基于key验证

    由于不同的主机之间实现远程登录需要输入mi码,这种情况有时是不安全的,如果是企业里想要登录的远程主机比较多,一个个输入mi码也比较麻烦,这时就可以考虑基于key验证。

    基于key验证是在客户端上生成公钥私钥对,同时将自己的公钥放入目标远程主机中,从而实现免密登录。只要客户端的私钥不被偷走,就不会产生安全问题,同时私钥是可以再加密的,中间人偷走了也打不开。

    笔者这里以hello-world主机为客户端,清空之前实验留下的 .ssh目录下的数据,执行 ​ssh-keygen​ 命令即可生成公钥私钥对,默认的为rsa算法,如果想填其他的也可以,因为是实验,笔者这边就不对私钥进行加密了。此时会自动生成.ssh目录,并将id_rsa.pub和id_rsa放在里面​(如下图)​。

总结ssh常用参数、用法_客户端_36

    我们将生成的公钥发送到目标主机中,即执行 ​ssh-copy-id -i .ssh/id_rsa.pub 10.10.10.155​ 命令,这一步操作时还是要进行手动确认的,此时目标主机centos7.9中会自动生成.ssh目录,并将hello-world的公钥放入到.ssh目录下的authorized_keys中​(如下图)​。

总结ssh常用参数、用法_centos_37

总结ssh常用参数、用法_客户端_38

    到这里我们的基于key验证也就做完了,hello-world主机上执行 ​ssh 10.10.10.155​ ,可以直接登录到centos7.9上​(如下图)​。

总结ssh常用参数、用法_客户端_39


  1. sshpass

    ​如果我们不做基于key验证的话,使用ssh登录时是不能直接在命令行中填写mi码的,而sshpass解决了这个问题。sshpass是一款自动登录ssh工具,允许用-p参数指明明文mi码直接登录远程服务器。不过sshpass需要下载,同时是由epel源提供,我们得保证epel源可用。

总结ssh常用参数、用法_客户端_40

    笔者这里以hello-world登录LeoMessi为例,执行 ​sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@10.10.10.153​ 命令即可直接登录目标主机​(如下图)​。

总结ssh常用参数、用法_客户端_41

    我们也可使用此种方法将公钥发给目标主机,下次就可以直接用ssh+ip来登录​(如下图)​。

总结ssh常用参数、用法_客户端_42

推荐阅读