Bash 无密码登录
问题陈述Bash 无密码登录,bash,unix,expect,Bash,Unix,Expect,问题陈述 invalid command name "sudo" while executing 我想访问服务器而不询问密码(将在脚本中提到),并在该服务器上运行命令 我的代码 #!/usr/bin/expect spawn sudo su - <server_name> expect "[sudo] password for chronicles:" set Password "xxxxxxx" send "$Password\r" #set timeout 300 se
invalid command name "sudo"
while executing
我想访问服务器而不询问密码(将在脚本中提到),并在该服务器上运行命令
我的代码
#!/usr/bin/expect
spawn sudo su - <server_name>
expect "[sudo] password for chronicles:"
set Password "xxxxxxx"
send "$Password\r"
#set timeout 300
send "whoami\r"
send "ls -ltr\r"
expect eof
限制
- 我没有权限更改环境变量或修改 .bash_profile/.bashrc
- 不允许使用su服务器名称命令
- 不提示输入密码就访问服务器的安全方法是通过SSH上的密钥登录永远不要以明文形式给出密码。
如果你只是谷歌,你会发现许多文章解释如何做到这一点。这是一个非常好的解释。大卫说得对,一般来说,这是一个不好的想法。偶尔有很好的理由这样做,或做类似的事情(例如,自动登录到串行控制台进行熄灯管理),但您没有提供任何说明,说明为什么这样做对您有意义 除此之外,
无效命令名
不是来自spawn
行,而是来自expect
行中的[sudo]
。Expect是基于tcl
,它。此外,传递给expect
的值是全局模式,而不是固定字符串,[]
方括号也是全局中的特殊字符。因此,您要寻找的答案是引用这些字符两次:
还请注意,在发送密码后,您可能应该包括另一行等待root shell提示。
[]
被解释为Tcl
中的“命令引号”(“工具命令语言”中的“命令”,这是Tcl
的缩写)
{}
是Tcl
中最强的引号,您可以使用它来阻止任何解释:
expect {[sudo] password for chronicles:}
当然,您也可以省略[sudo]
:
expect "password for chronicles:"
sudo
是否在您的路径中?尝试使用sudo
可执行文件的完整路径。你可以在shell中找到哪个sudo
。@Tyilo->which sudo给出--/usr/bin/sudo…是的,我同意。我们不应该用纯文本给出密码。但是当我使用“expect”时…我不得不…我正在跟踪你提供的链接。。。。让我们来看看为什么要使用expect?错误不会出现。。。。但是它在问我的密码。。我需要再次输入我的密码…Plz帮助!!答案已更新。如果它解决了你的问题,请投票并接受。
expect "password for chronicles:"