2012-01-31 71 views

回答

8

对于一般的命令行自动化,Expect是经典工具。或者如果你更喜欢Python,可以试试pexpect

下面是建议使用期待一个类似的问题:Use expect in bash script to provide password to SSH command

+0

我们应该停止推广期望作为自动化ssh的方式。 Ssh故意使这些提示很难自动化,以推动我们使用正确的解决方案:命令行标志绕过确认和公钥/私钥以消除密码提示。 – 2016-05-13 14:40:45

+1

这很理想,但现实世界往往不理想。对于这个问题,这是通常的做法。如果您使用了密钥,那么您可能也需要在密钥上输入密码,然后您可能会遇到同样的情况。当然,你可以使用'ssh-agent','keychain'等,但有时候会有不便或不切实际的原因。 – jjlin 2016-05-17 00:42:24

7

肯定是...使用的菌种,期待,并发送命令:

还有更多的例子遍布堆栈溢出,请参阅: Help with Expect within a bash script

根据您的系统,您可能需要首先安装这些命令。

+0

我们应该停止推广期望作为自动化ssh的方式。 Ssh故意使这些提示很难自动化,以推动我们使用正确的解决方案:命令行标志绕过确认和公钥/私钥以消除密码提示。 – 2016-05-13 14:40:56

14

对于简单的输入,比如两个提示和两个相应的固定的响应,你也可以使用“立即文档”,语法这看起来是这样的:

test.sh <<! 
y 
pasword 
! 

的< <前缀的模式,在这个案例 '!'。一切以该模式开始的行被解释为标准输入。这种方法类似于将多行echo传递到ssh的建议,只是它保存了echo命令的fork/exec,我发现它更具可读性。另一个优点是它使用了内置的shell功能,所以它不依赖于期望。

+0

我收回它,ssh通过一个tty设备提示,绕过标准输入。用Emily Litella的话来说,“没关系”。 :) – 2012-09-25 04:48:17

+0

更简单如此最好 – Abid 2014-04-28 06:46:18

0

SSH密钥与密码,与钥匙串

钥匙链是一个小工具,其管理以您的名义ssh-agent和允许的ssh-agent保持运行的登录会话结束时。在后续登录中,钥匙串将连接到现有的ssh-agent实例。实际上,这意味着必须在重新启动后首次登录时输入密码。在后续登录中,将使用来自现有ssh-agent实例的未加密密钥。这对于允许无密码ssh密钥的cron作业中的无密码RSA/DSA身份验证也很有用。

要启用钥匙串,请安装钥匙串并在〜/中添加如下内容。bash_profile:

eval keychain --agents ssh --eval id_rsa 从安全角度来看,ssh-ident和keychain比ssh-agent实例更受限于特定会话的生命周期,但它们提供了高级别的便利。为了提高钥匙串的安全性,有些人在他们的〜/ .bash_profile钥匙串调用中加入了--clear选项。通过这样做,必须在登录时重新输入密码,但在用户注销后,cron作业仍然可以访问未加密的密钥。钥匙串wiki页面包含更多信息和示例。

收到此信息;

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

希望这有助于

我个人能够在终端启动自动输入我的密码通过执行此操作:(你当然可以,修改脚本,它适合你的需要)

  1. 编辑bashrc文件以添加此脚本;

    检查SSH代理清醒

    如果[-z “$ SSH_AUTH_SOCK”];然后 EXEC的ssh-agent的bash -c “SSH-增加; $ 0” 回声 “的SSH代理被惊醒” 退出 网络

    上面一行将开始在终端推出的预期脚本。

    ./ssh.exp

这里有此内容的expect脚本

#!/usr/bin/expect 

set timeout 20 

set passphrase "test" 

spawn "./keyadding.sh" 

expect "Enter passphrase for /the/path/of/yourkey_id_rsa:" 

send "$passphrase\r"; 

interact 

这里是我的keyadding.sh脚本的内容(你必须把两个脚本在你的主文件夹,一般是/ home/user中)

#!/bin/bash 

ssh-add /the/path/of/yourkey_id_rsa 

exit 0 

我会强烈建议加密PA在.exp脚本中使用ssword,以及将这个.exp文件重命名为term_boot.exp或任何其他用于安全目的的文件。不要忘记使用nano或vim直接从终端创建文件(例如:nano ~/.bashrc | nano term_boot.exp)以及chmod +x script.sh以使其可执行。 A chmod +r term_boot.exp也是有用的,但是你必须在你的bashrc文件中的./ssh.exp之前添加sudo。因此,每次启动终端时,您都必须输入您的sudo密码。对我来说,这比密码更方便,因为我记得炉旁的管理员(sudo)密码。

此外,这是另一种方式来做到这一点,我认为; https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/

当我有时间的时候,肯定会改变我的这个方法。

相关问题