#bash #shell #ssh
#bash #оболочка #ssh
Вопрос:
У меня есть список из примерно 50 систем с уникальными IP-адресами, к которым мне нужно регулярно подключаться по ssh. Я знаю эти системы по четырехзначному буквенно-цифровому номеру, но мне постоянно приходится искать IP-адреса всякий раз, когда я подключаюсь к ним по ssh. Я хотел бы создать скрипт bash, который содержит список всех IP-адресов для каждой машины, и я могу ввести:
ssh_script aa11
и он выполняет:
ssh 111.222.333.444
Последующий вопрос: для некоторых систем требуется порт #, но я все равно хотел бы просто ввести ssh_script bb22, и он выполняет
ssh 333.444.555.666 -p 4444
Возможно ли это?
Комментарии:
1. Используйте DNS или /etc/hosts.
Ответ №1:
Это должно быть просто как таковое.
#!/bin/sh
port=22
case $1 in
aa11) host=111.222.333.444;;
bb22) host=333.444.555.666
port=4444;;
*) echo "$0: host $1 unknown" >amp;2
exit 2;;
esac
exec ssh -p "$port" "$host"
(Этот скрипт не использует функции Bash, поэтому я поставил #!/bin/sh
. Конечно, он должен работать и с Bash.)
Но, вероятно, лучшим решением будет настроить это ~/.ssh/config
вместо этого в вашем; тогда он также будет работать прозрачно для scp
программ и, которые вызываются ssh
внутренне, например, например git
.
Host aa11
Hostname 111.222.333.444
Host bb22
Hostname 333.444.555.666
Port 4444
См. Страницу руководства ssh_config для получения подробной информации об этом файле.
Вы можете объединить два;
#!/bin/sh
test -e ~/.ssh/config_too || cat <<: >~/.ssh/config_too
Host aa11
Hostname 111.222.333.444
Host bb22
Hostname 333.444.555.666
Port 4444
:
exec ssh -F ~/.ssh/config_too "$@"
(Не все sh
экземпляры обязательно поддерживают ~
, хотя теперь это разрешено POSIX; возможно, переключитесь на "$HOME"/.ssh/config_too
, если у вас устаревший sh
в некоторых системах.)
Комментарии:
1. имхо конфигурационный файл ssh намного превосходит все остальное.
-F
можно указать альтернативный конфигурационный файл при выполнении ssh, если вы чувствуете, что эта информация не относится к конфигурации по умолчанию — например, если вы хотите распространять ее независимо. ( man7.org/linux/man-pages/man1/ssh.1.html )2. работает как шарм спасибо @tripleee! мне нужно иметь возможность запускать это из разных систем и не иметь возможности редактировать конфигурацию для всех, поэтому этот автономный скрипт — именно то, что мне нужно.
3. Если вы можете сохранить автономный скрипт, вы можете сохранить альтернативный файл конфигурации для указания
-F
, как предложил Дэниел Фаррелл.