ssh执行非交互式命令

如果你想用脚本自动化登录到某台机子上,然后在上边执行个命令,怎么办呢?

可以使用ssh的非交互式命令

ssh [email protected] "/home/hczhang/bin/build.sh"

这里可以用expect模拟键盘输入将密码输入,也可以用无密码登录,具体就是将自己的公钥放在对端的authorized_keys里,登录的时候就不用输密码了,就是建立两台机子之间的信任关系,这里不多讲了。

那么如果你想执行sudo命令怎么办呢?比如:

ssh [email protected] "sudo /home/hczhang/bin/build.sh"

会出现 not present a tty to run sudo,

我们可以用-t选项模拟一个tty。

ssh -t [email protected] "sudo /home/hczhang/bin/build.sh"

好了,就到这里了。

原文:http://blog.csdn.net/hongchangfirst/article/details/37922911

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst

时间: 2024-11-09 01:22:13

ssh执行非交互式命令的相关文章

两种Linux下非交互式命令的实现

一.概述 在Linux环境,有多种实现自动化的脚本语言,如Shell.Python.Perl.Tcl等.Shell语言因与Shell外壳结合紧密,是最常见的实现自动化的脚本语言. 同时,在Linux环境中存在大量功能单一的小工具--通常它们在指定输入后,立即就可获得输出,例如echo.cat等字符串/文本打印工具,又或者是如sed.awk等最常用的字符串编辑工具.通过编写Shell脚本,我们可以反复利用这些小工具来实现一些自动化的批处理. 在少数情况下,我们也需要用到一些交互式的工具,例如pas

(转)SSH批量分发管理&非交互式expect

目录 1 SSH批量分发管理 1.1 测试环境 1.2 批量管理步骤 1.3 批量分发管理实例 1.3.1 利用sudo提权来实现没有权限的用户拷贝 1.3.2 利用sudo提权开发管理脚本 1.3.3 利用rsync来实现增量备份 1.4 SSH批量管理分发脚本实战 1.5 SSH批量管理总结 2 非交互式expect 2.1 非交互式生成密钥及实现批量管理 2.2 一键批量安装httpd服务 2.3 一键自动化50台规模集群网站 1 SSH批量分发管理 基于口令的,如何实现批量管理:expe

fdisk分区命令详解与fdisk非交互式分区

1.说明:fdisk如何来学习 fdisk,就是在linux中用来分区的一个命令了,至于详细的参数,可以man一下,这里给出实际应用过程中最常用的用法,因为这样比起单纯讲命令的语法功能更能掌握一个命令的实际用法. 下面的过程是在我自己的实验环境中搭建,先把简要的过程看一下: (1)添加一块1GB的磁盘 (2)fdisk详细分区过程 (3)通知Linux内核分区信息的更改 (4)格式化分区 (5)挂载分区 OK!我相信这样一个过程下来,你是真正可以做到添加一块硬盘,并自己做分区格式化以及使用,这样

ssh非交互式密码输入

ssh登陆不能在命令行中指定密码.sshpass的出现,解决了这一问题.sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码. 它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行.文件.环境变量中读取. 其默认没有安装,需要手动安装,方法如下: sshpass下载地址:http://sourceforge.net/projects/sshpass/ 下载为一个 tar.gz的压缩包. $ tar -zxvf sshpass-1.05.tar.

ssh执行sudo命令所遇到的错误解决

ssh 执行sudo 命令 遇到错误 ssh [email protected] "sudo CMD" 错误一:sudo: sorry, you must have a tty to run sudo 解决方式一: ssh 加 -t 参数 即:ssh -t [email protected] "sudo CMD" 解决方式二: 在/etc/sudoers 配置文件中注释Defaults    requiretty这行(这样有缺点,如果ssh带密码会在进程中显示) 错

非root用户ssh 执行 sudo远程机器免密钥

非root用户ssh 执行 sudo远程机器免密钥 # 1.登陆192.168.1.10 ssh-keygen -t rsa # 一路回车 # 将公钥添加到认证文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并设置authorized_keys的访问权限 chmod 600 ~/.ssh/authorized_keys [[email protected] ~]# cat /root/.ssh/id_rsa.pub          

go ssh 执行命令

go ssh 执行命令 package main import ( "fmt" gossh "golang.org/x/crypto/ssh" "net" ) type Cli struct { user string pwd string addr string client *gossh.Client session *gossh.Session LastResult string } func (c *Cli) Connect() (*Cl

推送文件(expect交互式方式与sshpass非交互式方式)

前提条件 以下两种推送的文件是SSH的公钥,推送方式依赖于SSH,基于SSH的相关方面操作和机器相关配置请参考我的上一篇博文"ssh服务批量管理例子" 1.expect交互式方式 1.1上传文件及文件内容 #以10机器为例. #执行rz –y分别上传"dis-sshkey"."expect-copy-sshkey.exp"和"iplist",三者文件内容如下: [[email protected] ~]$ ls -l dis-

/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的区别

线上的memcached又挂了,仍然没有得到core文件.排查原因,同事发现启动memcached的脚本存在可疑问题. 问题一:没有设置memcached工作目录,有可能core dump时没有工作目录写权限 这些脚本由crontab启动.脚本中没有设置工作目录,而这是非root用户的crontab.启动memcached时,工作目录不是memcached可执行文件所在目录.实验证明,这个是用户的home目录,crontab运行的脚本中打印pwd,结果是"home/work",work