2

В моей локальной сети есть хост CentOS, который я ежедневно использую для открытия SSH-соединений со многими (более 40) другими хостами как в Интернете, так и в локальной сети. Я настроил пары ключей RSA, чтобы пропустить интерактивную аутентификацию и некоторые сценарии bash, например:

[root@beta ~]# cat ~/connections/mywebsite.sh
ssh mywebsitefi@virtualserver123.hostingprovider.fi

Это прекрасно работает, когда мне нужно открыть соединения с ними, но не когда мне нужно scp файлы на тот же хост.

Можно ли создать что-то эквивалентное псевдониму для замены части username @ host, как это?

[root@beta ~]# scp myfile MYWEBSITE:/var/www

Возможность автозаполнения псевдонима с помощью клавиши табуляции также была бы замечательной.

Я понимаю, что псевдонимы bash могут использоваться только в качестве первого слова команды, но есть ли другой способ добиться этого? Если не в bash, может быть, другая оболочка?

3 ответа3

7

использовать возможности, встроенные в ssh, scp и rsync.

В вашем подкаталоге .ssh создайте файл 'config'. (chmod 0600)

В рамках этого вы можете описать хосты и опции, которые будут использоваться для определенных хостов (или глобальные опции).

Используя ваш пример: mywebsitefi@virtualserver123.hostingprovider.fi

Введите следующее:

Host MYWEBSITE
  Hostname virtualserver123.hostingprovider.fi
  User mywebsitefi
  Port 22

с этого момента, если вы используете 'MYWEBSITE' в качестве имени хоста, он автоматически предоставит реальное имя хоста, имя пользователя, порт, параметры, что вы укажете. (Номер порта указываю по привычке)

Я сам использую это для указания нестандартных номеров портов для моих ssh-серверов, выходящих в Интернет /

Вы можете напечатать:

ssh MYWEBSITE

и записи в файле .ssh/config будут заполнять URL, имя пользователя, порт и параметры.

scp MYWEBSITE:/somepath/somefile /home/me/
rsync -vzP /some/files MYWEBSITE:/my/home/

работать так, как вы ожидаете.

Если вы указываете несколько имен в строке Host, вы можете вызывать их по любому из этих имен, причем все они равны.

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

.ssh/config должен иметь права доступа 0600 (пользователь rw, ни один для всех остальных), иначе ssh будет пожаловаться и проигнорирует файл.

Конечно, дополнительная информация доступна в справочных страницах ssh(1) и ssh_config(5).

Все, что размещено до первой строки «Хост», считается глобальной опцией и применяется ко всем определенным вами записям. Удобно указывать тайм-ауты соединения, переадресацию X11 и другие.

3

Если вы установите пакет bash-complete, тогда он добавит автозаполнение имен хостов ssh и псевдонимов на основе информации, которую можно найти в разных местах, таких как .ssh/config, известные хосты и т.д.

0

Если я понимаю ваш вопрос, вам подойдет функция оболочки: если вы хотите жестко закодировать пользователя, хост и путь:

myscp () {
  scp "$@" user@host:path
}

использовать как

myscp *.html *.css

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .