我'我相信你会发现类似于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上编辑文件并试一试)。
因此,我的问题与以前一样。如果我能从专家那里得到一些意见,那就太棒了:)
添加信息:使用RedHat RHEL 6,2.6.32-573.3.1 我可以访问远程主机,一旦我&#39;在我的ID中,我的ID不需要密码来切换到diff_user。
答案 0 :(得分:0)
当你这样问的时候,我猜你没有无密码sudo
。
当您将脚本放在sudo
上时,无法与远程进程(stdin
)通信。
您应该使用ssh
和su
命令:
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