fix: 默认远程连接加 -t 分配伪终端,改用 tmux new -A
ssh 携带命令时不分配 PTY,导致 tmux 报 open terminal failed: not a terminal、回退 shell 无提示符。未传 $2 时改用 ssh_opts="-Y -t", 默认命令改为 tmux new -A(有会话则附加,无则新建)。 Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
This commit is contained in:
19
ssh.sh
19
ssh.sh
@@ -81,23 +81,26 @@ if [ "$port" = "null" ]; then
|
||||
port=22
|
||||
fi
|
||||
|
||||
# 未提供 $2 时,默认在远程执行:若装有 tmux 则 tmux a(附加到已有会话),否则进入交互式 shell
|
||||
# 未提供 $2 时,默认在远程执行:若装有 tmux 则 tmux a(附加到已有会话),否则进入交互式 shell。
|
||||
# 此时必须加 -t 强制分配伪终端,否则 tmux 报 "open terminal failed: not a terminal",回退 shell 也不显示提示符
|
||||
if [ -n "$2" ]; then
|
||||
cmd="$2"
|
||||
ssh_opts="-Y"
|
||||
else
|
||||
cmd='if command -v tmux >/dev/null 2>&1; then tmux a || tmux new; else exec "${SHELL:-sh}"; fi'
|
||||
cmd='if command -v tmux >/dev/null 2>&1; then tmux new -A; else exec "${SHELL:-sh}"; fi'
|
||||
ssh_opts="-Y -t"
|
||||
fi
|
||||
|
||||
echo "::*** Connecting to ${label}"
|
||||
if [ "$password" != "null" ]; then
|
||||
if command -v sshpass &> /dev/null; then
|
||||
echo "::*** sshpass -p $password -Y -p $port $username@$host '$cmd'"
|
||||
sshpass -p "$password" ssh -Y -p "$port" "$username@$host" "$cmd"
|
||||
echo "::*** sshpass -p $password $ssh_opts -p $port $username@$host '$cmd'"
|
||||
sshpass -p "$password" ssh $ssh_opts -p "$port" "$username@$host" "$cmd"
|
||||
else
|
||||
echo "::*** ssh -Y -p $port $username@$host '$cmd'"
|
||||
ssh -Y -p "$port" "$username@$host" "$cmd"
|
||||
echo "::*** ssh $ssh_opts -p $port $username@$host '$cmd'"
|
||||
ssh $ssh_opts -p "$port" "$username@$host" "$cmd"
|
||||
fi
|
||||
else
|
||||
echo "::*** ssh -Y -p $port $username@$host '$cmd'"
|
||||
ssh -Y -p "$port" "$username@$host" "$cmd"
|
||||
echo "::*** ssh $ssh_opts -p $port $username@$host '$cmd'"
|
||||
ssh $ssh_opts -p "$port" "$username@$host" "$cmd"
|
||||
fi
|
||||
Reference in New Issue
Block a user