Najpierw skonfiguruj klucze ssh w bramie, aby móc ssh na prywatny. Następnie na kliencie utwórz osobną parę kluczy prywatny / publiczny, której użyjesz do uwierzytelnienia w bramie. Np ssh-keygen -t rsa -f id_gateway.
Następnie w bramie użyj command=składni w pliku autoryzowanych_kluczy. Na przykład Twój wpis może wyglądać następująco:
command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....
Przeszukaj stronę podręcznika sshd, aby command="command"uzyskać więcej informacji. Dodaj do tego wiersza klucz id_gateway.pub. Następnie w swoim .ssh/configkliencie dodaj następujący wpis:
Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
Teraz od klienta powinieneś mieć możliwość ssh privatebezpośredniego wejścia. To działa nawet dla scpi sftp.
Dodatkowy kredyt
Jeśli chcesz użyć tego do wielu serwerów, ale chcesz zarządzać tylko jednym kluczem publicznym w bramie, możesz użyć następującej sztuczki. sshddomyślnie zezwala tylko na otrzymywanie określonych zmiennych ze środowiska lokalnego. Jednym z nich LC_PAPERjest rzadko używany do niczego. Możemy więc użyć go do przekazania nazwy hosta serwera w następujący sposób:
Najpierw zmień wpis klucza publicznego na
command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...
Następnie na kliencie dodaj do swojego .bashrcpliku (lub jakiejkolwiek powłoki) funkcję, która wygląda następująco:
ssh_proxy() {
LC_PAPER=$1 /usr/bin/ssh $*
}
Następnie utwórz alias, jeśli chcesz:
alias ssh=ssh_proxy
Na koniec dodaj Hostsekcje do swojego .ssh/configpodobnego do pokazanego powyżej. na przykład:
Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
Teraz powinieneś być w stanie to zrobić ssh privatei ssh private2tylko z jednego klucza publicznego na bramie.