如何在多个窗口输入密码?

如何在多个窗口输入密码?

我有一个脚本可以启动我的流浪机器,打开多个终端,并在每个新打开的终端中通过 ssh 连接到流浪机器。我的问题是我需要大约五个终端,并且我不想手动输入每个终端的密码。有没有办法在主终端中仅提示输入一次密码,并在 ssh 命令中使用相同的密码?

#!/bin/bash
cd /home/kkri/public_html/freitag/vagrant
vagrant up
for run in $(seq 1 $1)
 do
  gnome-terminal --window-with-profile=dark -e "ssh vagrant@localhost -p 2222" --$
 done
gnome-terminal --window-with-profile=git          
clear
echo "~~~ Have fun! ~~~"

答案1

一般来说(忽略 vagrant 或其他特定于系统的详细信息),您最好的选择是使用 SSH 密钥设置身份验证,然后运行ssh-agent​​.然后使用如下命令打开 ssh 会话:

# load the key to the agent with a 10 s timeout
# this asks for the key passphrase
ssh-add -t10  ~/.ssh/id_rsa  
for x in 1 2 3 ; do 
    ssh .... 
done

或者,如果你不能使用钥匙,你可以用 来组装一些东西sshpass

read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do 
    sshpass -e ssh ...
done
unset SSHPASS

尽管终端位于中间,但这会将密码设置保留在终端环境中。要解决这个问题,您可以将密码临时保存在文件中:

read -p "Enter password: " -s SSHPASS ; echo
PWFILE=~/.ssh/secret_password
cat <<< "$SSHPASS" > "$PWFILE"
unset SSHPASS
for x in 1 2 3 ; do 
    sshpass -f "$PWFILE" ssh ...
done
shred --remove "$PWFILE"

这仍然不是最佳选择,因为密码有可能击中磁盘,因此密钥会更好。

答案2

由于您使用的是 vagrant,因此您只需运行vagrant sshssh 即可连接到盒子,而无需输入密码。如果您有多个流浪盒子正在运行以及其他各种事情,这也将处理端口冲突。

或者,您可以使用 tmux 而不是 gnome-terminals 并利用其同步窗格功能:

#!/bin/bash
tmux_name="vagrantssh-$BASHPID"
tmux new -s $tmux_name -d
for run in $(seq 1 $1); do
    tmux splitw -t $tmux_name -v "ssh vagrant@localhost -p 2222"
    tmux select-layout -t $tmux_name tiled
done
tmux kill-pane -t 1
tmux set-window-option -t $tmux_name synchronize-panes on
tmux select-layout -t $tmux_name tiled
tmux new-window -t $tmux_name
tmux kill-window
tmux attach -t $tmux_name

这将启动 tmux 并在您指定的多个窗格中运行 ssh 命令,所有窗格都会同步(tmux 将密钥转发到所有窗格)。对所有窗格完成所需操作后,您可以ctrl+b:set synchronize-panes off关闭输入同步。为了方便起见,可以将其绑定到密钥。

答案3

解决的办法是使用密钥认证,比较安全,也解决了认证问题。

只需使用以下命令生成密钥对:

ssh-keygen -t rsa

并将文件内容复制/粘贴~/.ssh/id_rsa.pub~/.authorized_keys服务器计算机中。如果该文件不存在,则仅检查用户的权限。

如果您使用我推荐的多个终端terminator,它实际上可以解决此类问题向所有终端广播键盘特征

相关内容