‘壹’ shell脚本中,用expect命令如何实现自动远程操作,折磨我好久了..
既然$无法匹配,我觉得你完全可以单独配置一个环境变量,比如说我登录到服务器后
echo "SCPGOGOGO"
expect捕获到SCPGOGOGO 开始执行scp
expect好久不写了,不知道$?判断怎么写,如果要写我的翻书了。
当判断$?为真,然后执行send "java -jar"。不过我想在仔细思考一下可能会有更好的逻辑。
我不太稀饭expect这种交互写法。
因为有更多简单便捷的方法,不知道你为什么不用。
sshpass ssh密钥 简单点直接用sh操作ssh就可以达到你想要的效果,why死扣expect?,
各种集中式管理软件(puppet,salt,ansible...)都是为了方便远程操作管理的东西why?不用?
本来1小时解决的问题,死扣expect花了好几天,这种把一个问题发展到解决2个问题的做事方法不可取。
‘贰’ shell脚本中怎么ssh上远程机执行命令
你好,
先在两台机子上建立信任,ssh-key
具体方法网络下就有
脚本里的命令是
ssh 用户@ip
‘叁’ 利用shell脚本执行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环境,所以没有实际测试,你自己试试吧
免费提供最新Linux技术教程书籍,入门自学书籍《linux就该这么学》,为开源技术爱好者努力做得更多更好
‘肆’ Linux远程执行Shell命令或脚本
1. 远程执行Shell命令
2. 远程执行Shell本地脚本
#
‘伍’ 利用shell命令实现Eeclipse对Android的远程调试
这篇文章主要讲如何自己来做一个apk实现远程调试,也就是说我们先自己写一个apk来控制是否启用远程调试的功能,然后通过这个apk来启用远程调试,接着基于远程adb的方式来调试以后的程序。听起来真TM绕口。没关系,跟着看就行了。实现这个目标分为3步。
好吧,这个逼格的东西并不需要你多么的了解,我们只需要知道几条基本的命令。
设置adb的调试端口,当端口>-1的时候,adb是wifi调试,我们默认的一般将端口设置为5555
setprop service.adb.tcp.port 5555
对应的将端口设置为-1或者更小的数值,则将调试方式变为了usb调试
setprop service.adb.tcp.port -1
关闭adb
stop adbd
打开adb
start adbd
好了有了这几个命令的基础,就可以实现usb和wifi调试方式的转换了
怎么执行,鬼才管呢。我又不是搞底层的。对于执行shell命令,自有高手早已写好的工具类,这里将源码贴上
我们需要用到的方法是
解释下三个参数的意思
参数1:需要执行的命令数组
参数2:是否已经root过。oh天,忘了说,你的手机必须要先root才能来做这件事情,至于root的方式,太多了,什么root大师,xx大师。
参数3:是否需要返回结果,这个可有可无,如果你选择返回结果,我想多半是你想知道这些命令有没有执行成功,你只需要判断
CommandResult .result
的值是否为0,对的,linux就是这样,等于0就是成功了的意思
ok,剩下的活你应该会做了,写一个button控件,监听点击事件,在事件中调用这个方法。至于参数一怎么写,当需要打开wifi调试的时候就这样写
当需要关闭wifi调试的时候,只需要将5555改为-1就行
好的,现在你可以将apk编译到你的手机上,并且打开wifi调试,接着在如下目录
你可以通过 shift+右键 的方式有个“在此处打开命令行”。然后输入
adb connect xxxx
xxxx 是你的手机ip,端口不用输,默认就是5555,手机ip你可以在设置-关于手机-手机状态 中找到
于是“噌”的一下,你的eclipse里的device窗口就显示你的破手机已经连接上了,现在你可以丢掉数据线,静静的装逼了。真是有逼格的烧连啊。
断开连接,你可以在手机上断开,也可以在pc上通过
来断开,当然在手机上断开保险一点。
好的,有问题的同学可以留言,啊哈哈哈哈哈,这都不会,你好笨啊。
‘陆’ 本地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
‘柒’ 如何使用python执行远程shell脚本
最近有个需求就是页面上执行shell命令,第一想到的就是os.system,
代码如下:
os.system('cat /proc/cpuinfo')
但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。
尝试第二种方案 os.popen()
代码如下:
output = os.popen('cat /proc/cpuinfo')
print output.read()
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)
尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。
代码如下:
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output
Python Document 中给的一个例子,
代码如下:
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
‘捌’ 如何在Windows实现远程调用Linux下的shell指令
可以用ssh协议远程连接linux服务器就可以使用linux服务器上的shell指令了,下载个xshell软件,通过linux的用户名和密码 IP 就可以连接上了
也可以安装开源软件gow,在网上就可以下载到,这个软件是在windows下运行linux指令,不知道你是否需要
通过以上两种方法均可以运行linux下的shell