总结ssh常用参数用法
Posted JohnnyFang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结ssh常用参数用法相关的知识,希望对你有一定的参考价值。
ssh(Secure Shell)是一种加密的网络传输层协议,它代替了传统的telnet协议,可以帮助我们实现安全的远程登录,进行加密通信。具体的软件实现包括dropbear和OpenSSH,其中,OpenSSH在CentOS 默认安装,Ubuntu在安装时需要选择(如下图),否则安装完无法直接使用远程登录。
ssh分为服务器端和客户端两种,执行 ls /etc/ssh 命令可看到ssh_config和sshd_config,前者为客户端的配置文件,后者为服务器端的配置文件(如下图),我们这里所谈的ssh指的是客户端的,此篇主要是结合ssh的一些常用功能来总结其参数和用法。
- 远程登录主机
ssh最常用的功能之一就是实现远程登录主机,实现方式有两种,一种是ssh直接跟上目标主机的ip,另一种则是ssh跟上指定主机ip上的用户登录。
1.1 ssh加ip登录
ssh直接跟目标主机ip等登录时,会默认以当前的用户名称作为目标主机的用户去登录,如果目标主机不存在该名称的用户,则无法登录,如果存在,输入目标主机的用户mi码后可登录(如下图)。
ssh能实现加密通信,不过首次连接时的安全性是无法保证的,如果有中间人的存在,发了一份假的公钥,则我们后续的连接也是不安全的,所以可以在首次连接时进行验证。但是连接时提供的目标主机公钥是经过哈希算法加密过的,一般人看不懂,有个很简单的方法就是目标主机自己连接自己,将显示出的经过哈希算法加密的公钥与ssh客户端进行对比(如下图)。
1.2 ssh指定用户登录
ssh也可根据目标主机上已有的用户,进行指定用户名+ip的方式登录,如果之前已经连接过目标主机,再次连接时只需输入目标主机中的指定用户登录mi码即可(如下图)。
1.3 首次登录免公钥确认
上面谈到首次连接时需要进行公钥的确认,输入“yes”,如果企业内部不使用外网,连接时的安全性会有所增加,一台台机器去确认公钥会比较麻烦。不想进行公钥的确认也可以实现,ssh客户端的配置文件为/etc/ssh/ssh_config,找到“StrictHostKeyChecking ask ”,将ask改为no即可(如下图)。
另一种方法是不修改配置文件,加上-o来执行命令完成免公钥确认(如下图)。
1.4 远程执行命令和脚本
ssh可以帮我们在不切换到目标主机的情况下,远程执行命令(如下图)。
同时我们也可远程执行脚本,笔者以centos7.9为客户端,创建一个脚本内容很简单,就是新建a.txt,执行 ssh 10.10.10.154 /bin/bash < ssh.sh 命令,即可在名为hello-world的目标主机看到多出指定名称文件(如下图)。
- 指定端口号登录
ssh远程登录时,默认的端口号为22,在实际生产过程中可能会不太安全,这时我们可以考虑更换端口号。linux系统端口号范围为0-65535,其中0不使用;1-1023 由系统保留,只能由root用户使用;1024-4999 由客户端程序自由分配;5000-65535 由服务器端程序自由分配。修改端口号需要修改/etc/ssh/sshd_config配置文件信息,找到“Port 22”改为想要的数字,笔者这边以9527为例(如下图),修改保存后,需执行 service sshd restart 命令生效。
此时,如果客户端是无法直接连接的,必须加上-p和端口号才能登录(如下图)。
- 强制伪终端分配
强制伪终端分配这一功能有点类似于跳板,比如客户端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直接登录不可实现(如下图)。
此时有一个名叫hello-world的主机存在,可以远程登录centos7.9,而Messi可以远程登录hello-world(如下图)。
此时,我们在已经登录到hello-world主机上的Messi可以执行 ssh 10.10.10.155 命令,实现伪终端的强制登录(如下图)。
当然这样的登录方式会比较麻烦,我们可以使用-t,直接一条命令实现登录,即执行 ssh -t 10.10.10.154 ssh 10.10.10.155 命令(如下图)。
- 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文件夹,并且里面包含了指定文件(如下图)。
4.2 rsync
现在hello-world对f1.txt进行了更改,还是使用之前的命令,从centos7.9上的文件生成时间可以看出会重新覆盖centos7.9上的三个文件,即所有的文件都重新传输一遍(如下图)。
如果是在生产中,文件内容比较大,使用scp来更新数据会比较麻烦,此时就可以用上rsync命令。rsync基于增量数据同步,即只复制两方不同的文件。执行 rsync -a /data/test 10.10.10.155:/data 命令,对比hello-world和接收者centos7.9对应文件夹下的文件生成时间,可见是相同的(如下图)。
此时我们对hello-world主机上的f2.txt进行更改,执行 rsync -av /data/test 10.10.10.155:/data 命令(v选项可看到更新细节),显示只传输了f2.txt,即其他文件没有进行传输,回到centos7.9主机上查看test文件夹下,也确实只有f2.txt的时间发生了变动(如下图)。
可见,rsync在远程数据更新时确实比scp更实用。当然,如果我们在本地主机上删除了某个文件,直接使用上述命令是无法同步的。比如现在对hello-world对f3.txt进行了更改,同时删除了f1.txt,直接上一步的同步命令,只能对centos7.9中的f3.txt进行更新,而不能删除其f1.txt(如下图)。
要想保证对方也同步删除,还需加上--delete。我们再对f2.txt进行更改,同时执行 rsync -av --delete /data/test 10.10.10.155:/data 命令,显示删除了对方的f1.txt,同时对f2.txt进行了数据更新(如下图)。
- sftp
sftp是一种交互式文件传输工具,用法和传统的ftp工具相似,利用ssh服务实现安全的文件上传和下载。
笔者以hello-world主机为客户端,centos7.9为例,执行 sftp 10.10.10.155 命令,远程登录操作,可以查看主机相关文件等,如果是查看本机情况,需要在命令前加!,同时可实现上传和下载等功能(如下图)。
- 基于key验证
由于不同的主机之间实现远程登录需要输入mi码,这种情况有时是不安全的,如果是企业里想要登录的远程主机比较多,一个个输入mi码也比较麻烦,这时就可以考虑基于key验证。
基于key验证是在客户端上生成公钥私钥对,同时将自己的公钥放入目标远程主机中,从而实现免密登录。只要客户端的私钥不被偷走,就不会产生安全问题,同时私钥是可以再加密的,中间人偷走了也打不开。
笔者这里以hello-world主机为客户端,清空之前实验留下的 .ssh目录下的数据,执行 ssh-keygen 命令即可生成公钥私钥对,默认的为rsa算法,如果想填其他的也可以,因为是实验,笔者这边就不对私钥进行加密了。此时会自动生成.ssh目录,并将id_rsa.pub和id_rsa放在里面(如下图)。
我们将生成的公钥发送到目标主机中,即执行 ssh-copy-id -i .ssh/id_rsa.pub 10.10.10.155 命令,这一步操作时还是要进行手动确认的,此时目标主机centos7.9中会自动生成.ssh目录,并将hello-world的公钥放入到.ssh目录下的authorized_keys中(如下图)。
到这里我们的基于key验证也就做完了,hello-world主机上执行 ssh 10.10.10.155 ,可以直接登录到centos7.9上(如下图)。
- sshpass
如果我们不做基于key验证的话,使用ssh登录时是不能直接在命令行中填写mi码的,而sshpass解决了这个问题。sshpass是一款自动登录ssh工具,允许用-p参数指明明文mi码直接登录远程服务器。不过sshpass需要下载,同时是由epel源提供,我们得保证epel源可用。
笔者这里以hello-world登录LeoMessi为例,执行 sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@10.10.10.153 命令即可直接登录目标主机(如下图)。
我们也可使用此种方法将公钥发给目标主机,下次就可以直接用ssh+ip来登录(如下图)。
以上是关于总结ssh常用参数用法的主要内容,如果未能解决你的问题,请参考以下文章