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


14

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

Ответы:


7

В этом нет ничего плохого. Другой способ, которым я это сделал, тоже довольно грязный, со скриптом, сначала scp профиль, который вы хотите запустить, затем ssh, запустите его и оставайтесь на связи.

Итак, поместите все настройки профиля в локальный файл .<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'

(непроверенный, но должен сделать)


Как это выполняет задачу автоматической настройки на любом сервере, на который входит OP?
womble

Это не. Он решает часть вопроса «учетные записи пользователей, с которыми я вхожу в систему, используются другими людьми»
krissi

Это почти то же самое, что я делаю, но с одним отличием - вместо того, чтобы принимать эту переменную среды извне, я устанавливаю ее в самом ключе SSH. Это означает, что .ssh / authorized_keys содержит строки, начинающиеся с environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Брон Гондвана

3

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

Если вы не хотите использовать отдельные файлы ~ / .ssh / rc , вы можете сделать то же самое с / etc / ssh / sshrc . Быстрый тест для проверки вашего конкретного имени пользователя или какого-либо другого метода идентификации может помешать другим даже заметить, что это на месте.

Файл / etc / ssh / sshrc ТОЛЬКО создается , если ~ / .ssh / rc не существует, поэтому вы можете эффективно достичь двух уровней сложности.


дин динь динь - у нас есть победитель!
Приостановлено до дальнейшего уведомления.

Пропустил тот! Хотя это выглядит привлекательно, для этого все равно потребуется индивидуальная настройка каждого сервера, так как он на стороне сервера, верно?
Рамон

да, на стороне сервера, но вам нужно будет просмотреть только один файл, один раз. На самом деле не существует простого способа отправить поток команд для обработки сразу после входа в систему. {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/


Пожалуйста, предоставьте более подробную информацию о том, почему вы думаете, что это поможет.
Зоредаче

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