如何从bash脚本启动交互式ssh终端?

时间:2015-07-29 20:39:27

标签: linux bash ssh

我想从bash脚本启动SSH会话。从文件中读取$ username和$ hostname后,交互式SSH会话应该像手动启动一样启动。登录使用公钥完成。

我的代码:

ssh -t -l $username $hostname

这让我看到了SSH会话,但我无法与之交互。我该如何解决这个问题?

谢谢!

完整脚本:

#!/bin/bash

HOSTS_FILE=".mloginconnections"

echo ""
echo " *****************************"
echo " *                           *"
echo " *  MICWAG SSH LOGIN SYSTEM  *"
echo " *                           *"
echo " *****************************"
echo ""

function handleAdd {
        echo "Add remote host"
        echo ""
        echo "Enter connection alias:"
        read aliasname
        echo "Enter hostname:"
        read hostname
        echo "Enter username:"
        read username

        if [ ! -f $HOSTS_FILE ]
        then
                touch $HOSTS_FILE
        fi

        echo "$aliasname:$hostname:$username" > $HOSTS_FILE
}

function handleConnect {
        if [ $# -ne 1 ] 
        then
                echo "Usage:"
                echo "connect [serveralias]"
        else
                echo "Try to connect to server $1"

                cat $HOSTS_FILE | while read line
                do
                        IFS=':' read -ra conn <<< $line
                        aliasname=${conn[0]}
                        hostname=${conn[1]}
                        username=${conn[2]}

                        if [ "$aliasname" == "$1" ] || [ "$hostname" == "$1" ] 
                        then
                                echo "Found host: $username@$hostname"
                                ssh -tt -l $username $hostname

                        fi
                done
        fi
}

function handleCommand {
        echo "Enter command:"
        read command

        case $command in
        add)
                handleAdd
                ;;
        exit)
                exit
                ;;
        *)
                handleConnect $command
                ;;
        esac
        echo ""
}

while [ 1 ]
do
        handleCommand
done

2 个答案:

答案 0 :(得分:2)

问题是您从ssh命令而不是键盘输入cat $HOSTS_FILE输入。这就是为什么你无法与之互动的原因。

最简单,最丑陋的解决方法是从当前的tty重定向:

ssh -t -l $username $hostname < /dev/tty

答案 1 :(得分:0)

您需要按照-t的手册页中所述提供ssh个切换:

ssh -tt -l $username $hostname

手册页的说明:

  

多个-t选项强制tty分配,即使ssh没有本地tty。