linux - ssh-copy id 并在 bash 中期待

标签 linux bash shell expect

我正在 bash 中使用 expect 进行自动传递。代码是;

ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP (here asks pass)

VAR=$(expect -c" 
     expect "*?assword:*"
     send "$REMOTE_HOST_PASSWD\r";
     send -- "\r"
     expect eof
     ")

echo "$VAR"

它仍然询问密码。问题是什么

已解决:ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP 必须在 expect block 中;

spawn ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP

和线

 send "$REMOTE_HOST_PASSWD\r";

必须是

send \"$REMOTE_HOST_PASSWD\r\";

最佳答案

VAR=$(expect -c "expect '' \
  {eval spawn \
  ssh-copy-id -i $SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP; \
  interact -o -nobuffer -re .*assword.* return; \
  send "$REMOTE_HOST_PASSWD\r"; send -- "\r"; \
  expect eof;} ")

echo "$VAR"

关于linux - ssh-copy id 并在 bash 中期待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951926/

相关文章:

bash - sed-style 用随机字母替换字母,用随机数替换数字

linux - 如何将一长串参数读入 GDB/DDD

python - 我如何告诉 python 启动用户默认终端?

linux - 为什么我对 CPU 的限制无法通过 cgroups 验证

php - 模块:如何 'unload' native php?

linux - 如何知道谁在删除文件/目录

linux - 无法安装 apache dpkg 被中断

bash - 在 heroku 上运行 bash 是行不通的

linux - 如何让 git buildpackage 使用 bash 而不是 sh

linux - 如何从子 shell 脚本导出库路径并在父 shell 中使用该路径?