Переміщення мого PS1 підказки над ssh


19

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

Відповіді:


17

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

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

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


10

Якщо ви просто хочете надіслати 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.

(Звичайно, загальні облікові записи - це погана ідея, але я розумію, що ви можете не в змозі змінити цю ситуацію.)


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

Потім у відповідь:

PS1=$remote

1
Складне баш-підказка, ймовірно, зламається, якщо воно не буде процитовано (приходжу від вас, я здивований). І чому зайва команда, а не просто "PS1='$PS1' bash -i"(а чому б і ні exec, теж)?
Жил 'ТАК - перестань бути злим'

1
@Gilles: Відсутнє цитування: неохайність. Додаткова команда: PS1перезаписувати під час запуску оболонки було б незвично . Ніякого виконавця: під час тестування в моїй системі, схоже, нічого не змінилося - зайвого процесу немає.
Призупинено до подальшого повідомлення.

1
О, так, це хороший момент, місцеві .bashrc, ймовірно, перезаписують PS1.
Жил "ТАК - перестань бути злим"

2

Помістіть підказку PS1 у ~ / .ssh / середовище, а сеанс ssh передасть його кожному хосту, на якому ви ввійдете. Для мене це працює з openssh 4.3p2.


1
Це працює лише в тому випадку, якщо ввімкнена конфігурація сервера PermitUserEnvironment, яка за замовчуванням вимкнена.
Flimm

1

ви можете вказати змінні середовища на стороні клієнта, і якщо ssh-сервер дозволяє це (перевірити man sshd-config), ці змінні копіюються на сеанс під час входу в машину.

значить, вам доведеться налаштувати .bashrc на сервері, щоб перевірити наявний PS1 (або будь-яку іншу змінну) та встановити PS1 лише у тому випадку, коли він уже не встановлений.

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


1

Не ділитися входами. SSH як ви самі, тоді зробіть sudo -su shareduser( -sозначає "оболонка").

Зробіть sudoзберегти домашній каталог:

Defaults env_keep += "HOME"

Коли мене підвищать, я спробую запровадити таку політику, але наразі я дотримуюся цього.
Нефінансований горіх

1

Якщо ви хочете це зробити, не потребуючи додаткової копії, ви можете зробити щось подібне:

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, але з вашими переопрацюваннями.


Ось чому деякі люди бояться терміналів.

0

Якщо ви готові вторгнутися непомітно від ваших колег, і ви можете довіряти їм , щоб не заважати вашим вибором, то я пропоную поєднання відповіді Сайруса , відповідь Акіри і відповідь Денніс Вільямсона .

  1. На кожному сервері відредагуйте ~/.bashrcта додайте
    if ["$ Unf" = 1] # Спеціальний код для Unfundednut
    потім
        PS1 = " (бажаний запит) "
         (будь-які інші налаштування, які ви хочете) 
    fi
    в кінці. Поки ваші колеги «не оцінять [ви] написання через базовий профіль», вони не будуть знати про це, якщо не почнуть шукати цього.
  2. Коли ви увійдете на віддалений сервер, зробіть це
    ssh -t user @ host "Unf = 1 bash -i"
    Незважаючи на те, що ви, мабуть, захочете поставити це у функцію псевдоніму або оболонки у вашому локальному обліковому записі, він досить короткий - коротший, ніж будь-який з інших відповідей, - що ви можете просто ввести його вручну.

Я вважаю, що це досить зрозуміло, але: sshкоманда призводить до встановлення Unfзмінної на віддаленому сервері, коли ви входите в неї. Це викличе ваш код у віддаленому режимі .bashrc, що введе в дію ваші налаштування. Оскільки ви покладете свій код в кінці .bashrc, він змінить загальні параметри раніше у файлі.

Розкриття: Я цього не перевіряв.


-1

Найпростіший спосіб - це ІМХО:

ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'

Я не впевнений, що це працює; начебто не вистачає шару цитат. Навіть якщо це було, налаштування PROMPT_COMMAND(яке виконується кожного разу, коли оболонка видає підказку) здається дуже важким способом вирішення цієї проблеми. І, оскільки це дещо таємниче значення, будь-яка відповідь, яка підказує, що насправді повинна мати пояснення, як це працює.
Скотт

-2

Ви можете зробити такі речі, як встановлення вашого будинку над sshfs / nfs, але найпростішим рішенням є перескакувати ваш bashrc на нову машину. Це також приносить псевдоніми та інше.


Як я заявив у своєму запитанні, я ділюсь цими реєстраціями з іншими людьми. Я цілком впевнений, що вони не оцінять мене над написанням базового профілю.
Нефінансований горіх

1
Монтаж $ HOME над NFS божевільний. Просто говорю'.
Веслі Райс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.