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.