Я не впевнений, як ви можете розмістити свій локальний .zshrc
на віддалений сервер (це не постійно зберігаючи його там), це працює для мене, щоб змінити свою оболонку входу на віддалений сервер.
Оскільки це спільний обліковий запис, я можу використовувати zsh
цей метод лише для себе.
Додайте це до свого ~/.ssh/config
файлу на локальній машині.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Тут може бути шалений спосіб досягти того, що ви шукаєте, як нижче.
ПОПЕРЕДЖЕННЯ Це не дає гарантій і не виглядає «розумним», проте мені вдалося перенести свій локальний файл на сервер і за допомогою цього цього джерела ввести в оболонку входу.
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
Як це працює?
RemoteCommand
визначає, що потрібно запускати на віддаленій стороні.
LocalCommand
визначає, що потрібно запустити на локальному, який використовується для копіювання локального файлу на віддалений сервер для його пошуку. Ось улов, це відбувається лише після "успішного" підключення до віддаленого хоста.
Значення:
- Ваш зв’язок з дистанційним має бути відкритим і живим
- У вашої віддаленої оболонки ще немає файлу, тому доводиться чекати, поки файл знайдеться, ерго
sleep
- Ваші місцеві використовує
sftp
для передачі вашого файлу на віддалений сервер, віддалений сервер прокидається з sleep
та видає ваші сценарії.
Це супер хакі, я також хотів би знати, чи є кращий спосіб.
Оновлення: це можна використовувати замість "тривалого" часу сну:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
призначений для вибору оболонки.