17

Я использую конкретную подсказку PS1, которая мне нравится. Я делюсь несколькими логинами с другими людьми на нескольких разных серверах. Мне было интересно, есть ли способ указать в моем локальном профиле bash удаленное приглашение или любой другой способ, кроме копирования и вставки при каждом удаленном входе.

8 ответов8

14

Загрузите файл на каждый удаленный компьютер, скажем, ~/.my_custom_bashrc , со своей пользовательской конфигурацией bash (в данном случае PS1=...), затем запустите ssh с помощью:

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

Вы можете легко использовать функцию bash качестве оболочки для удобства чтения.

9

Если вы просто хотите отправить переменную 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 .

(Конечно, общие учетные записи - плохая идея, но я понимаю, что вы не можете изменить эту ситуацию.)

2

Поместите приглашение PS1 в ~/.ssh/environment, и сессия ssh перенесет его на каждый хост, к которому вы подключаетесь. У меня это работает с openssh 4.3p2.

2
ssh -t user@host "remote='$PS1' bash -i"

Затем по приглашению:

PS1=$remote
1

Вы можете указать переменные окружения на стороне клиента, и если ssh-сервер позволяет это (см. man sshd-config), эти переменные копируются в сеанс при входе в систему на компьютере.

поэтому вам нужно настроить .bashrc на сервере для проверки существующего PS1 (или любой другой переменной) и устанавливать PS1, только если он еще не установлен.

или, что упрощает задачу, вы связываете свои настройки в функцию ... и развертываете эту функцию либо в виде специального файла с вашим источником по запросу (source joes_bashrc), либо непосредственно в .bashrc. Наличие вашего собственного файла кажется более надежным. другие люди могут использовать ваши настройки, но не обязаны это делать.

1

Не делитесь логинами. SSH, а затем выполните sudo -su shareduser (-s означает "оболочка").

Заставьте sudo сохранить ваш домашний каталог:

Defaults env_keep += "HOME"
1

Если вы хотите сделать это без необходимости дополнительного 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, но с вашими переопределениями.

-2

Вы могли бы сделать что-то, например, смонтировать ваш дом через sshfs/nfs, но самое простое решение - это перенести ваш bashrc на новую машину. Это также приносит псевдонимы и прочее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .