提供密码给bash脚本里面的ssh命令,没有公钥和Expect的用法

我想在脚本中使用SSH ,但是这个脚本不会在我的机器上执行。

在我的实现中有两个限制。

  • 我不能在shell的标准之外工作,所以我不能使用expect因为我不知道它是否可以在这台机器上使用。
  • 我不能指望这台机器将拥有SSH public keys

什么是可能的select – 解决scheme?

我怎样才能提供ssh所需的密码与自动和安全的方式,而不增加额外的依赖?

是否可以在脚本中提供密码?

谢谢大家 :)

首先: 除非你知道为什么这是一件安全的事情(即你已经评估了知道这个秘密的攻击者可以做什么样的损害), 否则 不要以明文形式表达秘密。

如果您可以将脚本中的秘密放入其中,那么您可以随身携带ssh密钥并在ssh-agent shell中执行:

 #!/usr/bin/env ssh-agent /usr/bin/env bash KEYFILE=`mktemp` cat << EOF > ${KEYFILE} -----BEGIN RSA PRIVATE KEY----- [.......] EOF ssh-add ${KEYFILE} # do your ssh things here... # Remove the key file. rm -f ${KEYFILE} 

使用ssh密钥的一个好处是,你可以很容易地使用强制命令来限制密钥持有者在服务器上可以做的事情。

更安全的方法是让脚本运行ssh-keygen -f ~/.ssh/my-script-key来创建专用于此目的的私钥,但是那么您还需要一个将公钥添加到服务器。

安装sshpass,然后启动命令:

 sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no yourusername@hostname 

出于安全原因,您必须避免在命令行上提供密码,否则运行ps命令的任何人都可以看到您的密码。 最好使用这样的sshpass工具:

 #!/bin/bash export SSHPASS="your-password" sshpass -e ssh -oBatchMode=no sshUser@remoteHost 

您可能会对如何使用Bash脚本的密码运行sftp命令感兴趣

AFAIK除了使用密钥之外没有其他可能,或者如果您使用的是命令行版本ssh , 但是,对于大多数编程语言,如C,python,php,还有库绑定。 你可以用这样的语言写一个程序。 这样就可以自动传递密码。 但是请注意,这当然是一个安全问题,因为密码将以纯文本形式存储在该程序中