Moim preferowanym podejściem jest użycie pliku konfiguracyjnego SSH (opisanego poniżej), ale istnieje kilka możliwych rozwiązań w zależności od twoich zastosowań.
Argumenty wiersza poleceń
Myślę, że najlepszą odpowiedzią na to podejście jest odpowiedź Christianbundy na zaakceptowaną odpowiedź:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
Użycie podwójnych cudzysłowów pozwoli ci używać zmiennych z twojego komputera lokalnego, chyba że są one oznaczone znakami ucieczki (jak $SHELL
tutaj). Alternatywnie możesz użyć pojedynczych cudzysłowów, a wszystkie używane zmienne będą tymi z maszyny docelowej:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Funkcja Bash
Możesz uprościć polecenie, zawijając je w funkcji bash. Powiedzmy, że chcesz po prostu wpisać:
sshcd example.com /foo/bar
Możesz sprawić, by to działało, dodając to do ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Jeśli używasz zmiennej, która istnieje na zdalnej maszynie dla katalogu, pamiętaj, aby ją zmienić lub umieścić w cudzysłowie. Na przykład spowoduje to przejście do katalogu przechowywanego w JBOSS_HOME
zmiennej na zdalnym komputerze:
sshcd example.com \$JBOSS_HOME
Plik konfiguracyjny SSH
Jeśli chcesz widzieć to zachowanie przez cały czas dla określonych (lub dowolnego) hosta z normalnym poleceniem ssh bez konieczności używania dodatkowych argumentów wiersza poleceń, możesz ustawić opcje RequestTTY
i RemoteCommand
w pliku konfiguracyjnym ssh.
Na przykład chciałbym wpisać tylko to polecenie:
ssh qaapps18
ale chcę, aby zawsze zachowywał się tak:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Więc dodałem to do mojego ~/.ssh/config
pliku:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Teraz ta reguła dotyczy dowolnego hosta z „aplikacjami” w nazwie hosta.
Aby uzyskać więcej informacji, zobacz http://man7.org/linux/man-pages/man5/ssh_config.5.html