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.