Я не впевнений, як ви можете розмістити свій локальний .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призначений для вибору оболонки.