Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 无密码登录_Bash_Unix_Expect - Fatal编程技术网

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:"