GNU/Linux >> Znalost Linux >  >> Linux

SSH z A přes B do C pomocí soukromého klíče na B

Řešení 1:

Schéma:

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

Předpoklady:

  • A běží ssh-agent;
  • A má přístup k B;
  • B má přístup k C;
  • A Veřejný klíč ssh je přítomen v B:~/.ssh/authorized_keys
  • B Veřejný klíč ssh je přítomen v C:~/.ssh/authorized_keys

V ~/.ssh/config na A , přidejte

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

Pokud je váš soukromý klíč ssh na B v nestandardním umístění, přidejte jeho cestu za ssh-add .

Nyní byste měli mít přístup k C od A :

A$ ssh C
C$

Řešení 2:

Zkontrolujte, zda následující funguje.

ssh -t B ssh C

Pokud chcete použít klíč uložený na B.

, použijte následující příkaz
ssh -t B ssh -i /path/to/identity_on_B C

Zde zadáváme příkaz, tj. ssh -i /path/to/identity_on_B C který se má spustit na B namísto přihlašovacího shellu.

Řešení 3:

Teď jsem to vyřešil. Zde je řešení, které je poměrně jednoduché. Měl jsem to vidět dřív:

~/.ssh/config:

Host B
  HostName 1.2.3.4
  User myuser
  IdentityFile ~/.ssh/rsa_key
  ControlMaster auto
  ControlPath ~/.ssh/socket/master-%l-%[email protected]%h:%p

Host C.*
  User customer_username
  Port customer_port
  IdentityFile remote/path/to/ssh/key
  ForwardAgent yes
  ProxyCommand ssh accessable.server nc %h %p

Host C.server-1
  HostName 2.3.4.5

'B' je proxy server, kterým procházíte. Měl by být nakonfigurován tak, jak byste normálně konfigurovali přístup k serveru.

'C' je cílový hostitel. Musí být nakonfigurován tak, aby v procesu připojení používal „B“. Soubor identity v 'C' je cesta ke klíči ssh v 'B'. ProxyCommand používá Netcat k otevření připojení k 'C' z 'B'. Netcat nebo nc bude nutné nainstalovat na 'B'.

POZNÁMKA 1:Aby to fungovalo, musíte zkopírovat soubor identity B (obvykle ~/.ssh/rd_isa) do A. Obvykle měním jeho název na rd_isa_B.

POZNÁMKA 2:Toto řešení funguje také pro scp.

Doufám, že to pomůže ostatním.

Řešení 4:

Napsal jsem jednoduchý skript, který v podstatě vypíše mé ssh klíče na vzdálené instanci, a poté přidá ten, který jsem vybral, do svého místního ssh agenta. To není příliš čisté, ale umožňuje mi ponechat všechny klíče na vzdáleném místě, nikoli lokálně.

Zde je skript, pokud by měl někdo zájem:

#!/usr/bin/ruby

require "rubygems"
require "fileutils"

# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/  /g' | sed     's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list

# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp

# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0

Řešení 5:

Odpověď Snowball hodně pomohla. Udělal jsem však nějaké úpravy příkazu a chtěl jsem vysvětlit, jak to funguje. Vzhledem k této situaci:

    ssh        ssh
A -------> B -------> C
     ^          ^
  using A's  using B's
  ssh key    ssh key

Upravte ~/.ssh/config a přidejte hostitele B přes který chcete přejít, přesně tak, jak byste normálně nakonfigurovali hostitele:

Host B
 User myusername
 HostName b.mycompany.com

Poté přidáte hostitele C na které chcete skončit:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

Všimněte si ProxyCommand , kde:

  • ssh -T -q znamená, že by neměl přidělovat pseudo-TTY (-T ) a buďte zticha (-q );
  • jednou na hostiteli skoku B , přidáme klíč ke klíčům SSH Assh-add;
  • což funguje pouze proto, že jsme agenta SSH přeposlali pomocí -o 'ForwardAgent yes' .
  • ssh-add -t 1 označuje, že chci, aby byl klíč přidán pouze na 1 sekundu potřebnou k ověření ke konečnému hostiteli C;
  • a nakonec nc %h %p inicializuje netcat připojení ke konečnému hostiteli %h na portu %p (obě údaje vyplní SSH na základě informací v ~/.ssh/config soubor).

Pokud potřebujete zadat vlastní klíč na B Chcete-li použít, můžete to provést úpravou ssh-add část:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'

Linux
  1. Jak stáhnout soubor ze serveru pomocí SSH?

  2. Dešifrovat ze šifrovaného textu zašifrovaného pomocí RSA

  3. Přihlášení SSH nefunguje pomocí klíče Bez hesla?

  1. Jak nakonfigurovat klíče SSH pomocí cPanel

  2. Použití stejného soukromého klíče SSH na více počítačích

  3. SSH:V privátní síti, jak přistupovat ke vzdálenému počítači ze zdrojového počítače bez použití veřejného klíče ssh

  1. SSH bez hesla pomocí párů veřejného a soukromého klíče

  2. Ssh – Jak se připojit k počítači přes jiný počítač pomocí Ssh?

  3. Připojte se k serveru pomocí SSH v systému Linux nebo Mac OS X