在SSH中使用<<运行Sudo定界符

时间:2016-04-13 14:33:27

标签: ssh openssh heredoc rhel6 sudoers

我'我相信你会发现类似于stackoverflow或互联网上的许多其他帖子的问题。但是,我无法准确找到问题的解决方案。我有要在远程服务器上运行的任务列表,并且传递脚本是可以的!但不符合要求。

我' m从我的服务器运行以连接到远程服务器;

 ssh -t user@server << 'HERE'
   sudo su - <diff_user> 
   do task as diff_user
 HERE

 ssh -tt user@server << 'HERE'
   sudo su - <diff_user> 
   do task as diff_user
  HERE

使用第一个选项(-t),我&#39; m仍然无法做sudo,它在下面说;

  

sudo:抱歉,你必须有一个tty来运行sudo

上面的第二个选项(-tt),我&#39; m得到反向输入/输出到当前服务器会话,总是一团糟。

我尝试将内容作为脚本传递给SSH以在远程主机上运行,​​但是,获得了类似的结果。

除了下面的评论外,还有其他方法吗?

  

/ etc / sudoers文件中的默认值requiretty

我上面没有尝试过,我知道RedHat批准它将在未来的版本中删除/注释掉,无论如何。如果我选择步骤,我将在100多个虚拟机中完成上述操作(此外,我没有权限在VM上编辑文件并试一试)。

  

Bug 1020147

因此,我的问题与以前一样。如果我能从专家那里得到一些意见,那就太棒了:)

添加信息:使用RedHat RHEL 6,2.6.32-573.3.1                  我可以访问远程主机,一旦我&#39;在我的ID中,我的ID不需要密码来切换到diff_user。

2 个答案:

答案 0 :(得分:0)

当你这样问的时候,我猜你没有无密码sudo

当您将脚本放在sudo上时,无法与远程进程(stdin)通信。

您应该使用sshsu命令:

ssh -t user@server "sudo su - <diff_user>  -c do task as diff_user"

但它可能无效。可以使用expect启动交互式会话(这里有很多问题)。

答案 1 :(得分:0)

Bros,我试图以自动方式连接到另一台机器并检查一些只能访问root / sudo的日志,这是通过将密码,服务器,用户等传递到文件中来完成的 - 我知道这是不安全,也不是一个好的做法,但这是我公司的方式,不要抱怨,兄弟;无论如何我遇到了以下问题:tcgetattr:设备不合适ioctl,tty相关问题我不记得了,sudo:抱歉,你必须有一个tty才能运行sudo等等;我这3个星期都受了伤。最后,我从服务器返回响应,没有任何奇怪的消息。这是对我有用的代码:

#!/bin/bash
function checkLog(){
FILE=$1
readarray -t LINES < "$FILE"
machine=${LINES[4]}
user=${LINES[5]}
password=${LINES[6]}
fileName=${LINES[7]}
numberOfLines=${LINES[8]}

IFS='' read -r -d '' SSH_COMMAND <<EOT
sudo -S <<< '$password' tail $fileName -n $numberOfLines
EOT

RESULTS=$(sshpass -p $password ssh -tt $user@$machine "${SSH_COMMAND}")
echo "$RESULTS"
}

checkLog $1