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/config
kliencie 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 private
bezpośredniego wejścia. To działa nawet dla scp
i 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. sshd
domyślnie zezwala tylko na otrzymywanie określonych zmiennych ze środowiska lokalnego. Jednym z nich LC_PAPER
jest 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 .bashrc
pliku (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 Host
sekcje do swojego .ssh/config
podobnego 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 private
i ssh private2
tylko z jednego klucza publicznego na bramie.