diff --git a/ssh.sh b/ssh.sh index 848d033..0351ee2 100755 --- a/ssh.sh +++ b/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 \ No newline at end of file