Я использую конкретную подсказку PS1, которая мне нравится. Я делюсь несколькими логинами с другими людьми на нескольких разных серверах. Мне было интересно, есть ли способ указать в моем локальном профиле bash удаленное приглашение или любой другой способ, кроме копирования и вставки при каждом удаленном входе.
8 ответов
Загрузите файл на каждый удаленный компьютер, скажем, ~/.my_custom_bashrc
, со своей пользовательской конфигурацией bash
(в данном случае PS1=...
), затем запустите ssh
с помощью:
ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"
Вы можете легко использовать функцию bash
качестве оболочки для удобства чтения.
Если вы просто хотите отправить переменную PS1
, и она не содержит '
(одинарную кавычку), попробуйте:
ssh targethost -t "PS1='$PS1'; exec bash"
Хотя местный .bashrc
вполне может перезаписать PS1
(спасибо Деннису Уильямсону за указание на это).
Существуют способы передачи переменных среды по ssh, но они обычно отключены в конфигурации сервера. Если в конфигурации сервера включена директива PermitUserEnvironment
и у каждого пользователя есть своя пара ключей (да, вам может не повезти), вы можете добавить environment="PS1=…"
в строку в ~/.ssh/authorized_keys
соответствующую к вашему ключу.
Если вы хотите сохранить свою собственную конфигурацию в общей учетной записи пользователя, вы можете создать свой собственный каталог файлов конфигурации и установить переменную среды HOME
чтобы указать на этот каталог.
ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
Создайте символические ссылки в каталоге mrstatic.home
указывающие на соответствующую запись в родительском каталоге, когда вы хотите поделиться файлом с другими пользователями.
Затем войдите с
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
Если вы хотите изменить удаленный .profile
(или другой файл инициализации), вы можете автоматизировать свои настройки. Многие сайты пропускают переменные окружения LC_*
(обычно они используются для настроек локали). Если оба эти условия соблюдены, вы можете установить переменную, которая на самом деле не используется для локалей, скажем LC_USER
, на стороне клиента, и протестировать ее на сервере .profile
.
(Конечно, общие учетные записи - плохая идея, но я понимаю, что вы не можете изменить эту ситуацию.)
Поместите приглашение PS1 в ~/.ssh/environment, и сессия ssh перенесет его на каждый хост, к которому вы подключаетесь. У меня это работает с openssh 4.3p2.
ssh -t user@host "remote='$PS1' bash -i"
Затем по приглашению:
PS1=$remote
Вы можете указать переменные окружения на стороне клиента, и если ssh-сервер позволяет это (см. man sshd-config), эти переменные копируются в сеанс при входе в систему на компьютере.
поэтому вам нужно настроить .bashrc на сервере для проверки существующего PS1 (или любой другой переменной) и устанавливать PS1, только если он еще не установлен.
или, что упрощает задачу, вы связываете свои настройки в функцию ... и развертываете эту функцию либо в виде специального файла с вашим источником по запросу (source joes_bashrc
), либо непосредственно в .bashrc. Наличие вашего собственного файла кажется более надежным. другие люди могут использовать ваши настройки, но не обязаны это делать.
Не делитесь логинами. SSH, а затем выполните sudo -su shareduser
(-s
означает "оболочка").
Заставьте sudo
сохранить ваш домашний каталог:
Defaults env_keep += "HOME"
Если вы хотите сделать это без необходимости дополнительного scp, вы можете сделать что-то вроде этого:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
Это сгенерирует .bashrc.n, который основан на серверах bashrc, но с вашими переопределениями.
Вы могли бы сделать что-то, например, смонтировать ваш дом через sshfs/nfs, но самое простое решение - это перенести ваш bashrc на новую машину. Это также приносит псевдонимы и прочее.