Можно определить имя сетевых интерфейсов любой через udev (в любой современной системе Linux) или через /etc/network/interfaces
на Debian, Ubuntu и других дистрибутивах с помощью ifupdown. Не Теперь покрытия ответа udev; я буду обсуждать ifupdown.
В /etc/network/interfaces
, можно использовать mapping
директива для предоставления псевдонимов интерфейсу на основе результата выполнения сценария оболочки. Типичное использование для этой функции должно дать интерфейсам различные имена на основе сетевой среды (например. eth0-home
и eth0-work
) или определять имя интерфейса на основе его характеристик, таких как MAC-адрес. Существует названный сценарий в качестве примера get-mac-address.sh
то, что можно использовать для определения имени интерфейса на основе его MAC.
auto eth0 eth1
mapping eth0 eth1
script /usr/share/doc/ifupdown/examples/get-mac-address.sh
map 11:22:33:44:55:66 lan
map AA:BB:CC:DD:EE:FF internet
iface lan inet static
address 192.168.42.1
netmask 255.255.255.0
iface internet inet dhcp
Теперь Ваши два сетевых интерфейса называют lan
и internet
. Если Вы когда-либо заменяете один из них, только необходимо обновить MAC-адрес в том одном месте в /etc/network/interfaces
.
Это - невозмутимое да.
Когда каждый использует ssh
для выполнения команды на удаленном сервере, это выполняет некоторое необычное внутреннее перенаправление ввода/вывода. На самом деле я нахожу, что это одна из тонко более хороших функций OpenSSH. А именно, если Вы используете ssh
для выполнения произвольной команды в удаленной системе затем ssh отобразится STDIN
и STDOUT
к той из выполняемой команды.
В целях примера давайте предположим, что Вы хотите создать резервное копирование tarball, но не хотите, или не может, сохранить его локально. Давайте иметь глупца в этом синтаксисе:
$ tar -cf - /path/to/backup/dir | ssh remotehost "cat - > backupfile.tar"
Мы создаем tarball и пишем это в STDOUT
, нормальный материал. Так как мы используем ssh для выполнения удаленной команды, STDIN отображается на STDIN
из cat
. Который мы затем перенаправляем в файл.
Удобный способ передать данные по каналу между хостами, когда Вы не должны волноваться о безопасности по проводу, использует netcat
на обоих концах на соединении.
Это также позволяет Вам настроить их асинхронно:
На "получателе" (действительно, у Вас будет двухсторонняя связь, но легче думать о нем как это), работайте:
nc -l -p 5000 > /path/to/backupfile.tar
И на "отправителе", выполненном:
tar cf - /path/to/dir | nc 1.2.3.4 5000
Очень мощный инструмент для создания uni-и двунаправленных соединений socat
. Для короткого взгляда на возможности посмотрите на примеры в его странице справочника.
Это заменяет netcat
и подобные инструменты полностью и имеют поддержку ssl зашифрованных соединений. Для новичков это могло бы быть не достаточно просто, но, по крайней мере, хорошо знать, что это существует.
(global-set-key "\C-f" 'clear-shell)
Некомпрессированная
Сжатие на лету
Постарайтесь поставить свой открытый ключ SSH на другой хост только на одной команде
ssh root@example.com 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub
Все становится немного сложнее, когда у вас есть сервер-бастион , который необходимо использовать.
Вы можете передать ssh
в качестве команды ssh
следующим образом:
cat local_script.sh | ssh -A usera @ bastion ssh -A userb @ privateserver "cat> remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Остерегайтесь псевдотерминалов
Обратите внимание, что ключевым моментом здесь является то, что ssh
, как и большинство инструментов, по умолчанию обрабатывает правильные stdout
и stdin
.
Однако, когда вы начинаете видеть такую опцию, как Отключить выделение псевдотерминалов.
и Принудительное выделение псевдотерминалов.
вам может потребоваться немного проб и ошибок. Но, как общее правило , вы не хотите изменять поведение tty
, если только вы не пытаетесь исправить искаженный / двоичный мусор в эмуляторе терминала (что вводит человек).
Например, я обычно использую -At
, чтобы перенаправлять ssh-agent моей рабочей станции и чтобы удаленный запуск tmux не блокировал двоичный файл (например, ssh -At bastion. внутренний tmux -L bruno attach
). И для докеров тоже (например, sudo docker exec -it jenkins bash
).
Однако эти два флага -t
затрудняют отслеживание повреждения данных, когда я пытаюсь сделать что-то вроде этого:
# copy /etc/init from jenkins to /tmp/init in testjenkins running as a container
ssh -A bastion.internal \
ssh -A jenkins.internal \
sudo tar cf - -C /etc init | \
sudo docker exec -i testjenkins \
bash -c 'tar xvf - -C /tmp'
# note trailing slashes to make this oneliner more readable.
netcat
на обоих концах делает для большого простого, легкого канала передачи.tar cf - /path/to/dir | nc 1.2.3.4 5000
на одном сервере,nc -l -p 5000 > backupfile.tar
на другом. – MikeyB 15.03.2012, 22:14