Когда я вхожу в систему на каком-то компьютере, используясшЯ желаю, чтобы мойпсевдонимыифункцииесть. Другими словами, войдите в систему на какой-нибудь машине, и я хотел бы использовать свои сочетания клавиш.
Мне нужно, чтобы он был динамичным, каждый раз, когда я вхожу в систему, мне хотелось бы обновлять псевдонимы.
Примечания: Очень часто это первый вход в систему, без знания машины и файлов на ней. Иногда это один вход. Только один раз для этой машины. После этого ее нужно очистить, также нужно восстановить предыдущую конфигурацию.
решение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
когда вам нужен.
решение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-файл, так как в какой-то момент он может достичь максимума.