- PVSM.RU - https://www.pvsm.ru -
Злой троянец увел у меня аккаунт на хабр, после чего под моим аккаунтом начали публиковаться какие-то тупые мультики. К сожалению узнал я об этом только когда НЛО перевело меня в read-only. Не беда: повод наконец написать пост, который давно собирался.
Веб-разработчику консоль нужна, но не на столько что бы бросив все дела начинать читать толстенные книжки по линуксу. Именно поэтому я учился консольным хитростям от случая к случаю и, судя по моим сотрудникам, многие поступают точно так же. Раскрою пару удобных секретов, без которых я уже не могу жить.
Ключи я открыл для себя давно, хотя регулярно встречаются люди для которых они в новинку. Ключи ssh позволяют настроить один раз подключение и больше не хранить в «блокнотике» пароли ко всем сайтам
$ ssh-keygen -t dsa
Соглашаемся на стандартное расположение ключа: /home/user/data/.ssh/id_dsa,
Вводим (или не вводим) passphrase. Лучше все-таки вводить: система будет помнить ваш пароль от логина до логаута, то есть вводить постоянно этот пароль не нужно. Зато на порядок возрастет безопасность.
После этого мы получим два файла: ~/.ssh/id_dsa и ~/.ssh/id_dsa.pub.
Первый это личный (приватный) ключ — его лучше скопировать на флешку и спрятать про запас. Второй это ключ публичный, его-то мы и будем сообщать всем своим серверам.
Наиболее простой способ перенести ключ на сервер это выполнить у себя в консоли вот эту команду:
$ ssh user@hostname "umask 077; cat >> .ssh/authorized_keys" < ~/.ssh/id_dsa.pub
и в последний раз ввести пароль к SSH удаленного компьютера
Все работает прекрасно, но надо каждый раз вводить длинные логины и хостнеймы. Надо оптимизировать!
Редактируем файл ~/.ssh/config, добавляем:
Host host
User user
Hostname hostname
Проверяем права на файл ~/.ssh/config, если они разрешают писать кому-то кроме нас, меняем на другие:
$ chmod 644 ~/.ssh/config
Допустим компьютер, к которому мы хотим подключиться находится за натом. Нам нужно зайти по SSH на один сервер, затем уже с него перейти на нужный компьютер. Если это нужно делать по множеству раз в день это очень, очень быстро надоест.
Прописываем новое правило в конфиг:
Host computer.hostname
Hostname 192.168.1.10
User user
ProxyCommand ssh hostname nc %h %p
Вот и все! Теперь можем написать ssh computer.hostname, пользователь будет подставлен автоматически, соединение будет установлено напрямую с нужным компьютером. Главное не забыть ему тоже положить свой публичный ключ.
В добавок опишу две полезные директивы
LocalForward localhost:8080 192.168.10.10:80 #Пробрасывать удаленный порт к себе каждый раз, когда происходит подключение по SSH.
Port 8022 #указать порт SSH сервера, удобно когда он живет не на стандартном порту.
Вводить каждый раз четыре буквы host? Это же утомительно! Как правило автодополнение парсит файлы ssh конфига, достаточно начать писать хостнейм и нажать таб, что бы имя хоста было дописано автоматически. Если этого не происходит нужно баш этому научить.
Добавляем строчку
complete -W "$(echo `cat ~/.ssh/config | grep -iE '^(Host|HostName) ' | awk '{print $2}'`)" ssh
в файл ~/.bash_profile
Туда же можно дописать следующий код:
function __mysql_list_all_opts {
local i IFS=$'n'
mysql --help|egrep '^ -'|awk '{print $1 "n" $2}'|egrep '^-'|sed s/,$//|sort
}
__mysql_all_opts=
function __mysql_compute_all_opts {
: ${__mysql_all_opts:=$(__mysql_list_all_opts)}
}
function _mysql_complete {
local cur prev opts
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case $prev in
*)
if [[ "$cur" == -* ]]; then
__mysql_compute_all_opts
opts=${__mysql_all_opts}
else
opts=$(mysql -uroot -s -e 'show databases')
fi
;;
esac
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
COMPREPLY=( $(compgen -W "$opts" -- $cur) )
}
complete -F _mysql_complete mysql
Аналогично можно прописать и mysqldump
После того как мы откроем новую консоль bash у нас консоль будет дополнять имя удаленного компьютера и имя локальной базы!
Если у вас стоит пароль на подключение к базе нужно сделать следующий шаг.
Каждый раз запуская консольный клиент mysql или mysqldump нужно не забывать передавать ему логин и пароль. Что бы этого избежать достаточно раз и навсегда создать файл ~/.my.cnf со следующим содержимым:
[client]
user = 'root'
password = 'password'
[mysql]
pager = less -iMSx4 -FX
Секцию mysqld добавлять по желанию. Она позволит вам не мучаться оптимальным подбором лимита, при работе с базой из командной строке. Если вывод длиннее чем количество строк на экране — вывод автоматически будет направлен в команду less. По которой можно удобно перемещаться вертикально и горизонтально и даже делать поиск!
Что бы получить дамп базы данных с удаленного сервера раньше приходилось выполнять серию компанд. В худшем случае (пример основан на реальных событиях):
localhost $ ssh -P 8022 user@hostname #идем на сервер
hostname $ ssh user2@computer #идем на удаленный комп
computer $ mysqldump -u root -p password long_database_name > ~/filename.sql
computer $ exit
hostname $ scp user2@computer:~/filename.sql ~/filename.sql
hostname $ ssh user2@computer
computer $ rm ~/filename.sql
computer $ exit
hostname $ exit
localhost $ scp -P 8022 user@hostname:~/filename.sql ~/filename.sql
localhost $ ssh -P 8022 user@hostname
hostname $ rm ~/filename.sql
hostname $ exit
localhost $ cat ~/filename.sql | mysql -u root -p password long_database_name
localhost $ rm ~/filename.sql #залили наконец, удаляем
Теперь вместо всего этого ужаса достаточно выполнить одну команду:
$ ssh computer mysqldump long_database_name | mysql long_database_name
В реальности и того меньше, т. к. перед каждой командой можно нажать таб:
ssh com[tab] mysqldu[tab] lon[tab] | mys[tab] lon[tab]
Нет желания слать файл в распакованном виде? Не беда, будем на лету паковать с той стороны в зип, а с этой — распаковывать.
$ ssh computer 'mysqldump long_database_name | gzip' | gunzip | mysql longdatabase_name
В качестве дополнительных плюшек получили возможность качать прямо с удаленного компьютера за натом файлы к себе, не пересохраняя их по дорге.
$ scp computer:~/test.txt ~/
Если тема сообществу покажется интересной — продолжу.
Могу рассказать про то как настроить iTerm под маком, что б работать с ssh было необыкновенно удобно
Про то как азы баш скриптинга могут сэкономить кучу времени при работе с командной строкой
Про плюсы команды screen и как ее удобно настроить
А так же про забытого дедушку z-modem и чем он может помочь современному разработчику в повседневной жизни.
Автор: Alex_EXEcuter
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/6136
Нажмите здесь для печати.