摘自:
https://www.cnblogs.com/ftl1012/p/ssh.html
https://www.cnblogs.com/youngerger/p/9104144.html
SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接。
1.登录
ssh
-p22 omd@192.168.25.137 //
远程连接默认连接用户的home目录
2.直接执行命令 -->最好全路径
ssh
root@192.168.25.137
ls
-ltr
/backup/data
==>
ssh
root@192.168.25.137
/bin/ls
-ltr
/backup/data
3.查看已知主机
cat
/root/
.
ssh
/known_hosts
4.
ssh
远程执行
sudo
命令
ssh
-t omd@192.168.25.137
sudo
rsync
hosts
/etc/
5.
scp
-->远程文件的安全(加密)拷贝
scp
-P22 -r -p
/home/omd/h
.txt omd@192.168.25.137:
/home/omd/
scp
是加密远程拷贝,
cp
为本地拷贝。可以推送过去,也可以拉过来。每次都是全量拷贝(效率不高,适合第一次),增量拷贝用rsync
6.ssh
自带的
sftp
功能
1.Window和Linux的传输工具
wincp filezip
sftp
-->基于
ssh
的安全加密传输
samba
2.
sftp
客户端连接
sftp
-oPort=22 root@192.168.25.137
//linux下使用命令:
sftp
-oPort=22 root@x.x.x.x
put
/etc/hosts
/tmp
//put加客户端本地路径上传
get
/etc/hosts
/home/omd
//get下载服务器端内容到本地
远程执行命令
如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 df 命令呢?当然不是的,我们可以使用 ssh 命令在远程的主机上执行 df 命令,然后直接把结果显示出来。整个过程就像是在本地执行了一条命令一样:
$ ssh "df -h"
那么如何一次执行多条命令呢?其实也很简单,使用分号把不同的命令隔起来就 OK 了:
$ ssh "pwd; cat hello.txt"
执行需要交互的命令
有时候我们需要远程执行一些有交互操作的命令。
$ ssh "sudo ls /root" $ ssh "top"
执行多行的命令
有时候我们可能需要随手写几行简单的逻辑,这也没有问题,ssh 能轻松搞定!
当我们在命令中引用了变量时会怎么样呢?
注意,我们在上图的命令中为 bash 指定了 -c 参数。
远程执行脚本
对于要完成一些复杂功能的场景,如果是仅仅能执行几个命令的话,简直是弱爆了。我们可能需要写长篇累牍的 shell 脚本去完成某项使命!此时 SSH 依然是不辱使命的好帮手(哈哈,前面的内容仅仅是开胃菜啊!)。
1)执行本地的脚本
我们在本地创建一个脚本文件 test.sh,内容为:
ls pwd
然后运行下面的命令:
$ ssh < test.sh
通过重定向 stdin,本地的脚本 test.sh 在远程服务器上被执行。
接下来我们我期望能为脚本 test.sh 传递一个参数,为了验证传入的参数,在 test.sh 文件的末尾添加两行:
echo $0 echo $1
然后尝试执行下面的命令:
$ ssh < test.sh helloworld $ ssh < "test.sh helloworld"
下图显示了执行的结果:
$ ssh 'bash -s' < test.sh helloworld
在上图的最后两行,输出的是 “bash” 和 “helloworld” 分别对应 $0 和 $1。
2)执行远程服务器上的脚本
ls pwd
执行下面的命令:
$ ssh "/home/nick/test.sh"
注意,此时需要指定脚本的绝对路径!
下面我们也尝试为脚本传递参数。在远程主机上的 test.sh 文件的末尾添加两行:
echo $0 echo $1
然后尝试执行下面的命令:
$ ssh /home/nick/test.sh helloworld
真棒,最后两行 “/home/nick/test.sh” 和 “helloworld” 分别对应 $0 和 $1。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233055.html原文链接:https://javaforall.net