导航:首页 > 程序命令 > ssh自动执行命令

ssh自动执行命令

发布时间:2023-01-07 10:22:04

‘壹’ 本地shell脚本中ssh到远程服务器并执行命令

        在实际运用中在当前服务器执行命令后,需要在另一台服务器继续执行某些命令,分开去到另一台服务器执行也是比较麻烦的,因此整理下集中执行的方式

1、首先配置ssh免密操作

linux 下实现SSH互信: https://www.jianshu.com/p/2456d98aa607

2、简单命令

ssh [email protected] "cd /var/lib; ls; cd "

2.1 使用时注意,双引号必须有。若没加双引号,第二条及之后的命令会在本地执行

2.2 分号是将两条语句间隔开

2.3 单双引的区别:单引号不会解析值,是什么就传什么;双引号会解析值,将解析结果传过去

3、多条命令

     ssh [email protected]<< reallssh

      cd /var/lib/test

      tar -zxvf api.com.tar.gz

      ......

      exit

      reallssh

3.1 命令写在 << reallssh(开始) 至 reallssh(结束) 之间

3.2 reallssh可自己定义为其他形式

3.3 在结束前加上exit退出远程

4、可能遇到的问题

问题:远程登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误

解决方案:字面意思是伪终端将无法分配,因为标准输入不是终端。

所以需要增加-t -t参数来强制伪终端分配,即使标准输入不是终端。

to force pseudo-tty allocation even if stdin isn’t a terminal.

参考样例如下:

ssh -t -t [email protected] -p 22

--------------------------------------------------------------------------------

参考:https://blog.csdn.net/jinking01/article/details/84386769

‘贰’ 如何通过SSH远程运行命令自动化

从客户端来看,SSH提供两种级别的安全验证。 第一种级别(基于口令的安全验证),只要你知道自己的帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,这种验证方式不能保证你正在连接的服务器就是你想连接的服务器。

‘叁’ python 模拟 ssh 执行远程命令

日常开发连接 Linux 服务器,都会用到 ssh 客户端的软件
其实 python 有一个模块,可以简单模拟一个 ssh 客户端/服务端
编写一些自动化的的任务时,会经常和它打交道
简单记录一下 paramiko 的基本使用

paramiko 不是标准库,需要自行安装
要求 py2.7,3.4 版本以上 [1]

在得到一个 ssh_client 客户端连接对象后

第一次和服务器建立连接,需要选择是否自动将服务器的 host_key 公钥,记录在本地

因为,在计算机的世界里,没有永久的朋友-- IP 短时间里不会刷新,但是系统可能随时被重置

否则会报错提示:

可以加入 logging 模块,查看详细的通讯过程

使用三个变量,获取返回的信息对象

读取命令的执行结果

‘肆’ shell实现SSH自动登陆

[TOC]

注:需要执行权限,可通过 sudo chmod +x ./file_name.sh 添加

sh file_name.sh 就是指定了脚本解释器 /bin/sh 来解释执行脚本;常见的脚本解释器还有: /bin/bash 等,我们可以使用 ls -l /bin/*sh 命令来查看当前可用的脚本解释器;

这种方式不会像前两种方式一样fork一个子进程去执行脚本,而是使用当前shell环境执行。我们不必重启shell或者重新登录系统,就能使当前的更改生效。一般用于 .bashrc或者.bash_profile被修改的时候,

定义:我们写一个shell脚本时,总是习惯在最前面加上一行 #!/binbash ,它就是脚本的 shebang 。

作用:它指示了此脚本运行时的解释器,使用文件名直接执行shell脚本时,必须带上shebang。

使用:可以在shebang后面直接附加选项,执行时我们默认使用选项执行;

如 test.sh 的 shebang 为 #!/bin/sh -x ,那我们执行脚本时:

./test.sh hello 相当于: bin/sh -x ./test.sh hello ;

注意:在指定脚本解释器来执行脚本时,shebang会被指定的脚本解释器覆盖。

expect是一个能实现自动和交互式任务的解释器,它也能解释常见的shell语法命令,其特色在以下几个命令:

spawn command 命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;

它的一般用法为 expect "string" ,即期望获取到string字符串,可在在string字符串里使用 * 等通配符; string 与命令行返回的信息匹配后,expect会立刻向下执行脚本;

set timeout n 命令将expect命令的等待超时时间设置为n秒,在n秒内还没有获取到其期待的命令,expect 为false,脚本会继续向下执行;

一般用法为 send "string\r" , 向命令行输入一条信息, \r 表示输入回车;

创建脚本 touch aliyun_login_shell.sh ,内容如下:

执行 sudo chmod +x ./aliyun_login_shell.sh 命令给shell脚本添加执行权限;

运行 ./aliyun_login_shell.sh 命令,一键登陆成功!

优化一下:

脚本完成了,可是还是有些小瑕疵:

这里我们想到了linux的alias命令:

执行命令 vim ~./bash_profile ,在文件内部添加:

再使用 . ~./bash_profile 或 source ~./bash_profile

从此,我们无论在哪个目录,只要输入 alias_name 命令,回车,真正的一键登陆!

参考:

https://www.cnblogs.com/qiumingcheng/p/11544569.html

‘伍’ SSH中在文件下执行命令

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
参数说明
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。

‘陆’ 教你如何通过ssh控制远程主机,远程执行命令

教你如何通过ssh控制远程主机,远程执行命令ssh控制远程主机远程执行命令这个分两步,很简单很实用。第一步,设置ssh免认证,免认证就是只不用密码认证就可以直接登录,这在写脚本服务器控制时特别有用。每二步,就是到远端服务器上去执行命令
假如现在有两个服务器,一个叫SA,另一个叫SB。现在我要在SA上去控制SB。
格式:ssh
SB_用户名@SB_IP
命令for
example:ssh
[email protected]
echo
aaa>>hzs_test.txtssh
[email protected]
'echo
-e
haha/n
hoho
>>hzs_test.txt'

‘柒’ ssh如何远程执行命令

ssh支持远程命令参数 可以类似方式嵌套: alias pushbaby='cd /Users/xuqiang/Develop/work/tickets/baby/deploy;scp -r -v -i ~/.ssh/pedal/id_rsa baby.tar.gz baby.sql.txt [email protected]:/home/qiang.xu/tmp;ssh [email protected] -i ~/.ssh/pedal/id_rsa "source ~/.bash_profile;pushbaby";ssh [email protected] -i ~/.ssh/pedal/id_rsa "ssh [email protected] \"source ~/.bash_profile;pushbaby\""'更新要注意的是alias在非交互模式无法使用,需将替换成function

‘捌’ ssh远程连接服务器执行命令

首先说一下使用ssh远程连接服务器执行命令的方法:
为了方便描述,这里把测试服务器称之为A1,目标服务器称之为A2

如果可以直接登录到A2,则配置成功!

下面来说问题:
ssh在远程连接服务器执行命令的时候,经常会遇到环境变量的问题,如下:

如果出现上面的提示,则说明环境变量配置有问题。
先来说解决办法

问题解决!

这里就要说明bash有两种方式interactive + login shell模式和non-interactive + non-login shell模式
在服务器上执行命令,走的是interactive + login shell模式,而通过远程登录执行命令,走的是non-interactive + non-login shell模式。
这两种模式对于环境变量的读取是有区别的。

Shell首先会加载/etc/profile文件,然后再尝试依次去加载下列三个配置文件之一,一旦找到其中一个便不再接着寻找:
~/.bash_profile
~/.bash_login
~/.profile

所以当远程执行命令时,我们只需要让~/.bashrc文件中的环境变量与/etc/profile中的环境变量一致即可!

参考:
如何解决SSH远程执行命令找不到环境变量的问题

‘玖’ 简单的ssh脚本怎么编写写一个Linux下自动执行命令安装mysql,jdk等的ssh脚本怎么写

这个网上很多根本不需要去琢磨吧,网络一键安装lanp 就看到了

‘拾’ windows下python实现自动ssh网络设备执行多条命令并保存显示结果用什么库实现

假设从主机A,检查主机B上的进程,
需要在主机B上建立检查用户,例如叫x,
并设置通过public key认证登录SSH,不会可以google搜一下,

然后,在A机器上执行:
ssh x@B ~/command.sh > result.txt

command.sh就是B机器上放置在x目录下的脚本。
输出结果应该是写到了result.txt

或者另一种写法
result=`ssh x@B ~/command.sh`

结果直接保存到result变量中了。

暂时没有linux环境,所以没有实际测试,你自己试试吧

阅读全文

与ssh自动执行命令相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163