динамическая загрузка локальных псевдонимов оболочки в сеанс ssh

динамическая загрузка локальных псевдонимов оболочки в сеанс ssh

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

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

Примечания: Очень часто это первый вход в систему, без знания машины и файлов на ней. Иногда это один вход. Только один раз для этой машины. После этого ее нужно очистить, также нужно восстановить предыдущую конфигурацию.

решение1

Вы можете временно скопировать ваш .bashrcна удаленную машину с другим именем. Например, используя .bashrc_temp:

user@local$ scp .bashrc user@remote:~/.bashrc_temp

После этого вы можете войти в удаленную машину:

user@local$ ssh user@remote

иsourceфайл .bashrc_temp:

user@remote$ source ~/.bashrc_temp

Теперь вы можете использовать свои .bashrcи свои функции. Когда вы закончите свою работу, вы можете удалить файл ~/.bashrc_temp на удаленной машине и выйти из системы.

Копирование файла и вход на удаленную машину можно осуществить с помощью функции bash:

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

Обновлять:

.bashrcВы также можете рассмотреть возможность копирования /tmpна удаленный компьютер и источник /tmp/.bashrc_temp.

Обновление 2:

Вы можете войти в удаленную машину, используясш -т. Это автоматически будет использовать ваш temp .bashrc. Обновленная функция s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

решение2

Я думаю, sshrc — это то, что вам нужно: https://github.com/Russell91/sshrc

sshrc работает так же, как ssh, но он также использует ~/.sshrc после удаленного входа в систему.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Вы можете использовать это для установки переменных среды, определения функций и запуска команд после входа в систему. Это так просто, и это не повлияет на других пользователей на сервере — даже если они тоже используют sshrc. Для более продвинутой конфигурации продолжайте читать.

решение3

jens-na дал отличный ответ. Я потратил немного времени и немного переработал его, чтобы он работал немного лучше. Таким образом, вы можете передать любой параметр в SSH, например, номера портов. Разница в том, что он использует команду sshдля загрузки .bashrcфайла вместо scp, которая использует другие имена параметров команды.

Вы также заметите, что он загружает другой файл, .bashrc_remoteтак что вы можете выбрать именно то, что хотите загрузить на удаленные серверы, а не все

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Запустите его следующим образом:

sshs user@server

Имя ' sshs' означает "SSH Source". Используйте, sshкогда вам не нужен источник, и используйте, sshsкогда вам нужен.

https://gist.github.com/jonahbron/5549848

решение4

Вот что я придумал. Это позволяет вам поддерживать обычный rc-файл, но также делать все в одном ssh-подключении (т. е. нужно войти в систему только один раз, а не делать сначала scp).

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

Я не уверен, насколько большим может быть этот rc-файл, так как в какой-то момент он может достичь максимума.

Связанный контент