linux - SSH 后的初始欢迎消息(横幅)不允许命令正确执行

标签 linux unix ssh ksh

我正在尝试通过 SSH 连接到服务器并在目标服务器上执行一些命令。

下面是我的代码

!/bin/ksh

ssh user@pass <<EOF
how to wait ?

DIR_INPUT=/home/

LOGS=
echo "Enter Deployment Date (YYYYMMDD e.g 20150631)"
read DDATE
DDATE=`echo $DDATE | sed s/[^0-9]*//g`
echo "$DDATE"
MGT=`echo "$DDATE" | cut -c5-6 2>/dev/null`
DGT=`echo "$DDATE" | cut -c7-8 2>/dev/null`
LEQ=`echo ${#DDATE}`

echo $MGT
echo $DGT
echo $LEQ

if [ "$MGT" -gt 12 ] || [ "$DGT" -gt 31 ] || [ "$LEQ" -gt 8 ] || [ "$LEQ" -lt 8 ] || [ "$MGT" -eq 0 ] || [ "$DGT" -eq 0 ]
then
                echo "INVAILID DATE"
                exit 1
fi
echo "$DDATE"
cd $DIR_INPUT
EOF

SSH 到服务器后,有一些预定义的文本会在服务器上回显,因此,与 SSH 关联的命令会在其他服务器的终端到来之前执行。

有什么方法可以让命令等待一段时间,直到 ssh 连接未完全建立?

最佳答案

您可以尝试使用 -T 选项运行 ssh 以防止它在远程系统上分配 TTY:

ssh -T user@pass <<EOF
...

TTY 通常用于交互式 session 。如果您在远程系统上的 session 没有 TTY,则远程系统可能不会发送此文本。

关于linux - SSH 后的初始欢迎消息(横幅)不允许命令正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37477038/

相关文章:

Python - 从窗口获取文本

linux - Ubuntu 命令 UNIX - 查找不能用作登录 ID 的用户 ID 并打印最大的文件

c - 在 glibc 源代码中哪里可以找到 select() 源代码?

linux - 从二进制文件列表中打印包含特定 ascii 字符串的二进制文件

c - Unix Shell 在 C 中实现 Cat - 文件描述符问题

bash - 从通过 post-receive 钩子(Hook)创建的 ssh session 调用时,导出不起作用

git - 使用 JSch 连接到 github 时“用户身份验证失败”

macos - MAC VSCode远程ssh扩展连接Linux服务器失败

Python-MySQLdb 无法插入值,但运行打印到控制台的 SQL 会插入数据?

c - 编写一个make文件来编译一个项目,该项目的源代码和头文件位于不同的目录中