bash - 使用没有 tty 的 heredoc 在 ssh 后获取 bash 提示
问题描述
我想 ssh 到远程机器上,使用 heredoc 自动执行一些代码,然后为用户提供 bash 提示以根据需要手动执行进一步的命令。
到目前为止我试过(选项1)
ssh user@host << 'EOF'
echo "Hello"
EOF
这会很好地打印出“Hello”,但会关闭 ssh 连接并退出脚本。我也得到了臭名昭著的“伪终端将不会被分配,因为标准输入不是终端。”
使用单个 -t 开关的结果相同。
接下来我尝试了(选项2)
ssh -tt user@host << 'EOF'
echo "Hello `uname -n`"
EOF
哪个可以完成工作,但会产生一组奇怪的输出:
Success. Logging you in...
echo "Hello"
echo "Hello"
[remote]$ echo "Hello"
Hello
[remote]$ <
尝试不使用heredoc,例如
ssh user@host 'echo "Hello"; /bin/bash'
但 echo 将在不同的 shell 上执行
到目前为止,选项 2 让我最接近。欢迎任何其他解决方案!
解决方案
您可以尝试在命令行上设置一些 ssh 选项。这些也可以在用户的 ~/.ssh/config 文件中设置。将 remote-host 替换为 user@host 或等效的 ssh config Host模式。
单线
ssh -o RequestTTY='yes' -o RemoteCommand='echo "Hello $(uname -n)"; bash -l' remote-host
多行
ssh -o RequestTTY='yes' -o RemoteCommand='
echo "hello from $(uname -n)"
echo "I am $(whoami)"
bash -l
' remote-host
推荐阅读
- python - django URLconfig 的问题没有找到我设置的 URL 模式
- reactjs - 仅在移动浏览器上出现 tensorflow.js 和 reactjs 错误
- c++ - 使用 XCode 打开 C++ 框架
- reactjs - 初学者反应项目,npm start 不工作
- node.js - ReactNative + NodeJS - 简单聊天需要 Socket.io?
- javascript - 在 Javasript 中将打开和关闭标签转换为自关闭标签
- c++ - 如何将用户输入作为密码并将其与 C++ 文件中的数据进行比较
- sql - SQL Server 数据库中 JOIN 附近的语法错误
- php - 如何在没有 FormBundle 的情况下在 symfony 中将字符串从输入类型 =“datetime-local”转换为日期时间?
- xamarin - 如何将 Xamarin 背景页面 (SfBackdropPage) 放在 Xamarin 选项卡式视图 (SfTabView) 中?