SSH еквівалент .profile / .bashrc


14

Я шукаю спосіб автоматично визначити деякі псевдоніми в моєму сеансі на будь-якому сервері, на якому я ssh. Я не можу помістити їх у .bashrcфайли на сервері, оскільки облікові записи користувачів, з якими я входжу, поділяються іншими людьми, і крім того, їх є десятки, і підтримка сценарію на кожній машині була б болючою. Я знаю, що міг expectби автоматично вводити псевдоніми, але мені було просто цікаво, чи є у OpenSSH щось вбудоване, що можна було б використовувати для досягнення цього?

Відповіді:


7

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

Отже, розмістіть усі параметри профілю у локальному файлі .<local username>-<hostname>-init.shта запустіть сценарій нижче, щоб увійти на віддалений хост.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

Мені це подобається, тому що для цього не потрібна спеціальна конфігурація на сервері, приємно!
Рамон

4

Ви можете помістити свою конфігурацію .bashrcі дозволити виконувати їх лише під час входу. Щоб зробити це можливим, ви можете передати змінну середовища через ssh.

.bashrc модифікації

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config модифікації:

AcceptEnv ... IAMTHEGREATEST

.ssh/config модифікації (клієнтська сторона):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc модифікації (клієнтська сторона):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(неперевірений, але повинен робити)


Як це відповідає цілі автоматичного налаштування речей на будь-якому сервері, в який входить ОП?
живіт

Це не. Це вирішує "частину запитання
входжу

Це майже саме те, що я роблю, але з однією різницею - замість того, щоб прийняти цю змінну середовища зовні, я встановив її в самому ключі SSH. Це означає, що .ssh / autori_keys містить рядки, що починаються з середовища = "IAMTHEGREATEST = forsure" ssh-dss ...
Брон Гондвана

3

На сторінці man (ssh (1) man ) , якщо ви створюєте файл ~ / .ssh / rc , він буде виконаний перед тим, як буде виконана оболонка для входу користувача, тим самим надаючи можливість виконувати завдання "перед встановленням" перед входом у систему .. . Наведений приклад - монтувати мережеві спільні папки перед входом у систему.

Якщо ви не хочете використовувати окремі файли ~ / .ssh / rc , ви можете зробити те ж саме з / etc / ssh / sshrc . Швидкий тест на перевірку вашого конкретного імені користувача чи якогось методу ідентифікації може обмежити інших навіть не помічати, що це було в наявності.

/ etc / ssh / sshrc ТИЛЬКО джерело, якщо ~ / .ssh / rc не існує, тому ви можете ефективно досягти двох шарів складності.


ding ding ding - у нас переможець!
Призупинено до подальшого повідомлення.

Пропустив того! Хоча це виглядає привабливо, для цього все ж знадобиться налаштувати кожен сервер окремо, оскільки він знаходиться на правій стороні сервера?
Рамон

так, серверна сторона, але вам доведеться лише один раз обрізати один файл. Існує не дуже простий спосіб відправити потік команд для обробки відразу після входу. {Grin} Хоч трохи напишіть, можливо, напишіть щось ... {не сьогодні!}
lornix

2

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

На жаль, немає можливості sshпередати їх до віддаленої оболонки.

Ви можете написати sshобгортку на стороні клієнта, яка створює приємне середовище на віддаленій стороні, але це було б не дуже.


0

Якщо можливо, я б зберігав невеликий скрипт, який ініціалізував / визначав усе, що потрібно на сервері, доступному звідусіль, і виконував би його після входу на кожному сервері.


0

Одним з можливих рішень було б поставити свій скрипт, який встановлює все на веб-сервері, до якого можуть отримати доступ усі інші сервери.

Тоді кожен сервер повинен просто мати невеликий сценарій, щоб зробити щось на кшталт:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

Таким чином вам доведеться лише оновити його в одному місці.


-3

Подивіться на .ssh / config

Ось приклад https://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/


Надайте детальніше про те, чому ви вважаєте, що це допоможе.
Зоредаче

Ми дійсно вважаємо за краще, щоб відповіді містили вміст, а не покажчики на вміст. Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
користувач9517
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.