gpt4 book ai didi

linux - 在 bash 脚本中等待 ssh 密码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:25 24 4
gpt4 key购买 nike

我正在尝试通过 ssh 在远程机器上执行命令,我需要脚本等待提供 ssh 密码(如果需要)。这是我的代码片段:

ssh -T ${remote} << EOF
if [ ! -d $HOME/.ssh ]; then
mkdir $HOME/.ssh
touch $HOME/.ssh/authorized_keys
chmod 0600 $HOME/.ssh/authorized_keys
fi;
EOF

问题是,EOF 之间的命令开始在本地机器上执行,而无需等待提供传递。有没有什么办法可以等 pass 后再继续脚本?

最佳答案

就这么简单:

ssh -T ${remote} << 'EOF'
if [ ! -d $HOME/.ssh ]; then
`mkdir $HOME/.ssh`
`touch $HOME/.ssh/authorized_keys`
`chmod 0600 $HOME/.ssh/authorized_keys`
else
EOF

注意 EOF 周围的 ' 单引号。

但我建议您使用 $( ) 形式而不是反引号:反引号 (`)

用于旧式命令替换,例如

foo=`command`

foo=$(command)

建议改用语法。 $() 内的反斜杠处理并不令人惊讶,并且 $() 更容易嵌套。参见 http://mywiki.wooledge.org/BashFAQ/082


如果需要传递变量:

var=42
ssh -T ${remote} << EOF
if [ ! -d \$HOME/.ssh ]; then
\`mkdir \$HOME/.ssh\`
\`touch \$HOME/.ssh/authorized_keys\`
\`chmod 0600 \$HOME/.ssh/authorized_keys\`
else
echo $var
EOF

关于linux - 在 bash 脚本中等待 ssh 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com