返回顶部
首页 > 资讯 > 服务器 >关于SSH 远程执行命令你要知道的二三事
  • 278
分享到

关于SSH 远程执行命令你要知道的二三事

你要二三命令 2022-06-04 21:06:30 278人浏览 安东尼
摘要

前言 相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作,我们希望做到: 免手工输入密码 支持执行多个命令,执行 shell 脚本 支持执行 s

前言

相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作,我们希望做到:

免手工输入密码 支持执行多个命令,执行 shell 脚本 支持执行 sudo 的命令

免手工输入密码

我们可以使用 ssh 互信,sshpass 和 expect 等工具来避免手工输密码。

使用过程可能会碰到如下需要手工输入 yes 的繁琐场景:


$ ssh username@hostname
The authenticity of host ... can't be established.
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?

为了避免出现上述场景,往 ssh 命令添加如下参数:


$ ssh -o "StrictHosTKEyChecking no" username@passWord

SSH 互信

SSH 互信的配置非常简单,首先生成 ssh key:


$ ssh-keygen

把 public key 拷贝到信任方中:


$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname

之后免密执行命令:


$ ssh -o "StrictHostKeyChecking no" username@password cmd

sshpass

sshpass 是一个用于非交互的 ssh 密码验证工具,使用前先安装:


$ yum install sshpass

使用如下:


$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@hostname cmd

expect

Expect 是用来进行自动化控制和测试的软件工具。虽然学习成本较高,但是 expect 的功能强大,利用 expect 可以方便的执行远程命令。使用前先安装:


$ yum install expect

例如:


#!/usr/bin/expect

spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "passwordn"
expect "*$*"
send "commandn"
expect "*$*"
send "exitn"
expect eof

Expect 不仅支持 ssh,还支持 scp, ftp 等工具。

支持多命令和脚本

执行多条命令

sshpass 和 expect 在支持多条命令上非常类似,只需用 && 连接命令即可:


# ssh trust
$ ssh -o "StrictHostKeyChecking no" username@password "cmd1 && cmd2"

例如:


# sshpass
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "ls -a && mkdir test"

# expect
......
expect "*$*"
send "ls -a && mkdir testn"
......

执行本地脚本

对于执行本地脚本,ssh 和 sshpass 的用法类似。


# ssh trust
$ ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

# sshpass
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

对于 expect,首先需要把脚本拷贝到远程主机,然后在远程主机执行该脚本,步骤如下:


...
# Copy script to remote host
spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/
expect "*assword*"
send "passwordn"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "passwordn"
expect "*$*"
send "sh shell_script.shn"
......

支持执行 sudo 命令

有些命令需要 sudo 权限才能执行,但是我们不希望重复的输入密码,我们可以把每条命令修改为如下:


cmd ---> 'echo password | sudo -S cmd'

例如:


$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "echo password | sudo -S mkdir /newdir"

对于如 echo, dd 等部分命令,有时会出现如下失败场景:


$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo password | sudo -S echo hello > /newdir/newfile'
bash: /newdir/newfile: 权限不够

解决办法如下:


cmd ---> 'echo password | sudo -S sh -c "cmd"'

# For example
$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo WSfdl097018= | sudo -S sh -c "echo hello > /newdir/newfile"'

如果采用 expect,需要把脚本拷贝到远程主机,然后在远程主机采用 sudo 执行该脚本,相对 sshpass 更简便和健壮:


...
# Copy script to remote host
spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/
expect "*assword*"
send "passwordn"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "passwordn"
expect "*$*"
send "sudo sh shell_script.shn"
expect "*assword*"
send "passwordn"
......

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

--结束END--

本文标题: 关于SSH 远程执行命令你要知道的二三事

本文链接: https://lsjlt.com/news/18654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 关于SSH 远程执行命令你要知道的二三事
    前言 相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作,我们希望做到: 免手工输入密码 支持执行多个命令,执行 shell 脚本 支持执行 s...
    99+
    2022-06-04
    你要 二三 命令
  • SSH远程执行命令需要注意什么
    小编给大家分享一下SSH远程执行命令需要注意什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的...
    99+
    2023-06-09
  • 关于彻底测试你需要知道的所有事情
    什么是穷举测试?当您的团队中的所有测试人员都用尽并且所有计划的测试都已执行时,就会发生详尽的测试(也称为完整测试)。它是一种质量保证测试技术,其中测试所有场景或数据以进行测试。以更容易理解的方式,详尽的测试意味着确保在测试阶段结束时没有未发...
    99+
    2023-06-04
  • ASP shell 容器:你需要知道的一切关于响应的事情!
    ASP shell 是一种常用的 Web 攻击工具,它可以通过 Web 应用程序的漏洞来获得系统的控制权。然而,这种攻击手法也可以被用来进行安全测试和漏洞挖掘。ASP shell 容器就是一个用来模拟 ASP shell 攻击的工具,它可...
    99+
    2023-06-21
    shell 容器 响应
  • 你知道如何在 Python 中执行 Shell 命令吗?这可以让你的编程更高效!
    在Python中执行Shell命令是一项非常有用的技能,可以让你更高效地编程。在本文中,我们将介绍如何在Python中执行Shell命令,并提供一些示例代码来帮助你更好地理解。 首先,让我们来看看Python中执行Shell命令的方法。Py...
    99+
    2023-08-21
    bash 编程算法 shell
  • python基于paramiko库远程执行 SSH命令如何实现sftp下载文件
    小编给大家分享一下python基于paramiko库远程执行 SSH命令如何实现sftp下载文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!楔子我们使用 Pyt...
    99+
    2023-06-07
  • 你知道吗?使用 Laravel 在 HTTP 请求中执行 Shell 命令的技巧
    Laravel 是一个广泛使用的 PHP 框架,它提供了许多方便的工具和函数,可以帮助开发人员轻松地构建 Web 应用程序。在这篇文章中,我们将讨论如何使用 Laravel 在 HTTP 请求中执行 Shell 命令,以及一些技巧和最佳实践...
    99+
    2023-07-02
    laravel shell http
  • Python实现SSH远程登陆,并执行命令的方法(分享)
    在自动化测试过程中,比较常用的操作就是对远程主机进行操作,如何操作呢?使用SSH远程登陆到主机,然后执行相应的command即可。 使用Python来实现这些操作就相当简单了。下面是测试code。 代码如下...
    99+
    2022-06-04
    命令 方法 远程登陆
  • Java 框架中的 Path 索引:你需要知道的所有关于优化你的应用程序的知识。
    Java 是一种广泛使用的编程语言,它提供了丰富的编程框架,以便开发人员可以更快速地开发高质量的应用程序。其中,Path 索引是一个非常重要的概念,在 Java 应用程序的性能优化中扮演着关键的角色。在本文中,我们将探讨 Path 索引的概...
    99+
    2023-06-26
    框架 path 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作