Как ввести пароль для нескольких окон?

У меня есть сценарий, который запускает мою бродячую машину, открывает несколько терминалов и соединяется с бродягой машиной через 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! ~~~" 

В целом (без учета бродяг или других деталей, относящихся к системе) лучше всего настроить аутентификацию с помощью 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" 

Это все еще не оптимально, так как есть шанс, что пароль попадет на диск, поэтому клавиши будут лучше.

Поскольку вы используете бродягу, вы можете просто запустить vagrant ssh в ssh в поле без ввода пароля. Это также будет обрабатывать столкновения портов, если у вас будет более одного бродячего бокса и других вещей.

В качестве альтернативы вы можете использовать tmux вместо gnome-terminal и использовать его функцию синхронизации:

 #!/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 чтобы отключить входную синхронизацию. Это может быть связано с ключом для удобства.

Этот подход будет заключаться в использовании проверки ключа, его безопасности и решения проблемы аутентификации.

Просто сгенерируйте пару ключей:

 ssh-keygen -t rsa 

И скопируйте / вставьте содержимое файла ~/.ssh/id_rsa.pub в ~/.authorized_keys на сервере. Если файл не существует, проверьте разрешения только для пользователя.

Если вы используете терминалы с мультипликаторами, я рекомендую terminator , он фактически решает эту проблему с широковещательным клавиатурным ко всем функциям терминалов

Ваш лучший вариант – использовать эмулятор терминала, который может разделить экраны. Большинство из них имеют функцию группировки окон и отправки команды в каждое окно группы. Вы можете использовать терминатор, например, если вам нужен инструмент gui или tmux для альтернативы оболочки.