无密码登录

Deb*_*tya 5 unix bash expect

问题陈述

我想访问服务器而不问我密码(将在脚本中提到)并在该服务器上运行命令.

我的守则

#!/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
Run Code Online (Sandbox Code Playgroud)

产量

invalid command name "sudo"
    while executing
Run Code Online (Sandbox Code Playgroud)

限制

  • 我没有访问权限来更改env变量或修改.bash_profile/.bashrc.
  • 不允许使用su server_name命令

Ada*_*ers 8

大卫是对的,通常这是一个主意.这种情况偶尔有充分的理由,或做类似的事情(例如自动登录到串行控制台进行熄灯管理),但是你没有提供任何关于为什么你这样做有意义的指示.

注意事项不谈,invalid command name是不是从未来的spawn线,但来自[sudo]expect行.Expect基于tcl,[]方括号视为表示命令替换的特殊字符.另外,传递给的值expectglob模式而不是固定字符串,[]方括号也是globs中的特殊字符.所以你要找的答案是两次引用这些字符:

    expect "\\\[sudo\\\] password for chronicles:"
Run Code Online (Sandbox Code Playgroud)

另请注意,在发送密码后,您可能应该包含另一expect行以等待root shell提示.