SSH远程登录并执行命令测试

这篇具有很好参考价值的文章主要介绍了SSH远程登录并执行命令测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。

远程执行命令

如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 df 命令呢?当然不是的,我们可以使用 ssh 命令在远程的主机上执行 df 命令,然后直接把结果显示出来。整个过程就像是在本地执行了一条命令一样:

$ ssh nick@xxx.xxx.xxx.xxx "df -h"

那么如何一次执行多条命令呢?其实也很简单,使用分号把不同的命令隔起来就 OK 了:

$ ssh nick@xxx.xxx.xxx.xxx "pwd; cat hello.txt"

第一条命令返回的结果: /home/nick
这说明用这种方式执行命令时的当前目录就是登陆用户的家目录。
第二条命令返回 hello.txt 文件的内容。
注意,当命令多于一个时最好用引号括起来,否则在有的系统中除了第一个命令,其它都是在本地执行的。

SSH远程登录并执行命令测试

执行需要交互的命令

有时候我们需要远程执行一些有交互操作的命令。

$ ssh nick@xxx.xxx.xxx.xxx "sudo ls /root"
$ ssh nick@xxx.xxx.xxx.xxx "top"

SSH远程登录并执行命令测试

这两条命令虽然提示的失败原因不同,但它们有一个共同点:都需要与用户交互(需要 TTY)。所以它们失败的原因也是相同的:
默认情况下,当你执行不带命令的 ssh 连接时,会为你分配一个 TTY。因为此时你应该是想要运行一个 shell 会话。
但是当你通过 ssh 在远程主机上执行命令时,并不会为这个远程会话分配 TTY。此时 ssh 会立即退出远程主机,所以需要交互的命令也随之结束。
好在我们可以通过 -t 参数显式的告诉 ssh,我们需要一个 TTY 远程 shell 进行交互!
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。

SSH远程登录并执行命令测试

作为总结,我们看看 -t 参数的官方解释:
"Force pseudo-terminal allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty."
好吧,更强悍的是我们居然可以指定多个 -t 参数!

执行多行的命令

有时候我们可能需要随手写几行简单的逻辑,这也没有问题,ssh 能轻松搞定!

SSH远程登录并执行命令测试

你可以用单引号或双引号开头,然后写上几行命令,最后再用相同的引号来结束。
那么如果需要在命令中使用引号该怎么办?
其实针对类似的情况有一条比较通用的规则,就是混合使用单双引号。这条规则在这里也是适用的:

                                        SSH远程登录并执行命令测试

 当我们在命令中引用了变量时会怎么样呢?

SSH远程登录并执行命令测试

请注意上图中的最后一行,并没有输出我们期望的 nick。这里多少有些诡异,因为如果变量没有被解释的话,输出的应该是 $name 才对。但是这里却什么都没有输出。
对于引用变量的写法,可以通过下面的方式保证变量被正确解释:

SSH远程登录并执行命令测试

注意,我们在上图的命令中为 bash 指定了 -c 参数。

远程执行脚本

对于要完成一些复杂功能的场景,如果是仅仅能执行几个命令的话,简直是弱爆了。我们可能需要写长篇累牍的 shell 脚本去完成某项使命!此时 SSH 依然是不辱使命的好帮手(哈哈,前面的内容仅仅是开胃菜啊!)。

执行本地的脚本

我们在本地创建一个脚本文件 test.sh,内容为:

ls
pwd

然后运行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx < test.sh

SSH远程登录并执行命令测试

通过重定向 stdin,本地的脚本 test.sh 在远程服务器上被执行。

接下来我们我期望能为脚本 test.sh 传递一个参数,为了验证传入的参数,在 test.sh 文件的末尾添加两行:

echo $0
echo $1

然后尝试执行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx < test.sh helloworld
$ ssh nick@xxx.xxx.xxx.xxx < "test.sh helloworld"

下图显示了执行的结果:

SSH远程登录并执行命令测试

看来上面的方法都无法为脚本传递参数。
要想在这种情况下(远程执行本地的脚本)执行带有参数的脚本,需要为 bash 指定 -s 参数:

$ ssh nick@xxx.xxx.xxx.xxx 'bash -s' < test.sh helloworld

SSH远程登录并执行命令测试

在上图的最后两行,输出的是 "bash" 和 "helloworld" 分别对应 $0 和 $1。

执行远程服务器上的脚本

除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!
此时在远程服务器上用户 nick 的家目录中有一个脚本 test.sh。文件的内容如下:

ls
pwd

执行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx "/home/nick/test.sh"

SSH远程登录并执行命令测试

注意,此时需要指定脚本的绝对路径!

下面我们也尝试为脚本传递参数。在远程主机上的 test.sh 文件的末尾添加两行:

echo $0
echo $1

然后尝试执行下面的命令:

$ ssh nick@xxx.xxx.xxx.xxx /home/nick/test.sh helloworld

SSH远程登录并执行命令测试

真棒,最后两行 "/home/nick/test.sh" 和 "helloworld" 分别对应 $0 和 $1。文章来源地址https://www.toymoban.com/news/detail-487139.html

到了这里,关于SSH远程登录并执行命令测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux命令详解 | ssh命令】 ssh命令用于远程登录到其他计算机,实现安全的远程管理

    在编程和系统管理领域,远程管理是一项至关重要的任务。SSH(Secure Shell)命令是一种加密的网络协议,它提供了一种安全的方式,使您能够在不同的计算机之间进行远程连接和管理。通过使用SSH命令,您可以在远程计算机上执行命令、传输文件以及进行安全的远程登录。

    2024年02月12日
    浏览(44)
  • SSH远程执行命令

    22服务器上有 jenkinsAutoBuild.sh ,执行以下命令,jenkinsAutoBuild.sh 会在远程服务器21上执行 不带参数 如果需要带参数,执行以下命令 执行21 服务器上的脚本文件,注意脚本要写绝对路径 不带参数 带参数 在脚本中应加载环境变量

    2024年02月16日
    浏览(38)
  • 故障排查:通过ssh远程执行命令时报错未找到命令

    博客主页:https://tomcat.blog.csdn.net 博主昵称:农民工老王 主要领域:Java、Linux、K8S 期待大家的关注💖点赞👍收藏⭐留言💬 最近收到测试同事的反馈,在通过ssh远程执行命令是遇到“未找到命令”的报错。如下图所示: 单独远程执行lsof命令也报错。 但远程服务器的lsof命令

    2024年02月12日
    浏览(43)
  • shell脚本ssh远程执行命令给变量赋值的问题

    从A机器通过SSH方式到B机器,并执行相关的命令。命令中包含变量及变量的赋值。 代码如下,意思是,ssh到192.111.111.27这台机器,cd到 / 根目录下,并执行ls命令,如果ls出来的结果不为空,则执行echo命令。可以肯定的是 / 根目录下是有内容的。 可以看到当执行到 echo 命令的时

    2024年02月12日
    浏览(48)
  • linux ssh远程登录

    目录 一、ssh概念 二、配置文件 三、ssh组成结构 四、远程控制过程 五、远程复制  六、配置密钥 七、wraooers防火墙                     一、ssh概念   ssh:一种安全通道协议 功能:1.实现字符界面远程登录 2.远程复制 3.ssh协议是对通信对方的数据传输进行加密出来,包括用

    2024年02月06日
    浏览(45)
  • Linux开启ssh远程登录

    你好! 这里介绍了Linux系统Centos、Ubuntu环境下开启ssh的方法。 安装openssh-server; 修改sshd服务配置文件 开启监听端口,去掉前面的#注释即可 允许远程登录 使用用户名密码作为验证连接 开启sshd服务 7.配置开机自启动 安装ssh服务器端,Ubuntu默认没有安装ssh的server,需要安装 修

    2024年02月07日
    浏览(41)
  • go 执行ssh 批量登录执行命令,返回了dial tcp: lookup : no such host 建立ssh连接错误: ssh: handshake failed: ssh: una

    因为是初学者,很粗糙的一段命令,下面的局部代码 这段代码主要通过 SSH 协议登录多个交换机,并在这些设备上执行一组命令。代码的主要流程如下: 读取登录文件、IP文件和命令文件: 读取登录文件,获取 SSH 连接需要的用户名和密码。( 读取 IP 文件,获取要登录的多

    2023年04月17日
    浏览(61)
  • Linux配置SSH远程登录管理

    目录 一、SSH协议 1.SSH简介 2.SSH的优点 3.SSH远程控制软件及服务 二、SSH远程管理配置 1.配置OpenSSH服务端 2.使用SSH客户端软件 (1)SSH远程登录 (2)scp远程传输文件 3.SSH登录验证的两种验证方式 (1)密码验证 (2)密钥对验证         SSH 为 Secure Shell的缩写, 为建立在应用

    2024年02月07日
    浏览(56)
  • Linux设置远程调试ssh允许root登录

    默认情况安装完SSH服务并开启,root是不允许登录的,所以以下步骤必须完成 1、已经安装完ssh以后,找到ssh配置文件 /etc/ssh/sshd_config 2、使用终端命令gedit /etc/ssh/sshd_config 命令修改文件 3、找到配置项PermitRootLoginwithout-password,最左边加上#号注释这一行 如下图: 4、换行编写

    2024年02月10日
    浏览(47)
  • 【Linux】无法通过SSH远程登录root账户

    问题描述 想要使用ssh直接远程到root账户下,提示Permission denied,再三确定不是因为输入的root密码错误造成的 先通过登录普通账户 使用su - root方式登录,接下来解决问题~ 问题分析 查看与ssh相关的配置文件/etc/sshd/sshd_config 找到PermitRootLogin配置项,发现 PermitRootLogin no PermitRo

    2024年01月18日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包