1

Я пытался исследовать свои варианты, но ничто не работает так, как мне нужно. Наиболее полезная информация находится здесь: файлы scp через промежуточный хост

У меня есть следующие настройки: Я на Машине А. У меня настроены ключи на Машине B (с включенным агентом ssh), которые предоставляют мне доступ к Машине C. (Кроме того, причина этой конфигурации заключается в том, что доступ к машине B сильно ограничен, включая двухфакторную аутентификацию, и каждая другая машина настроена так, чтобы разрешать только корневой доступ SSH, исходящий с этой машины.)

Проблема заключается в том, что код ssh-agent запускается только для оболочек входа в систему, а не при выполнении команд поверх ssh, поэтому он не пытается использовать ключ, расположенный на компьютере B, для доступа к компьютеру C. Это код в моем .bashrc и .profile:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi

В идеале я хотел бы иметь возможность присвоить псевдониму некоторую команду, чтобы я мог запустить ее как scp (например, scpproxy localfile user@MachineC:/root/remotefile). Мое текущее решение с компьютера B - scp -3 user@MachineA:localfile user@MachineC:remotefile (где -3 заставляет scp использовать локальный компьютер в качестве промежуточного хоста вместо того, чтобы по умолчанию он пытался копировать напрямую с От А до С), что менее чем идеально.

Любая помощь приветствуется!

1 ответ1

1

Конфигурация для scp и ssh через промежуточные хосты (по существу) одинакова. Многие другие ответы на scp, ssh или даже rsync в том же контексте должны работать для вас. По сути, вы должны использовать тот же ключ, чтобы получить доступ с машины "А" к "В", который вы используете для доступа с машины "Б" к "С". Однако, похоже, вы пытаетесь использовать ключи без паролей, расположенные на "B", чтобы получить доступ к "C". Оставляя в стороне (плохие) последствия для безопасности этих ключей без пароля, я бы вместо этого предложил вам поместить тот же открытый ключ вашего (надеюсь, защищенного паролем) закрытого ключа, который находится на "A", в файл ~/.ssh/authorized_keys на ». C». Таким образом, все, что вам нужно сделать, это что-то вроде этого:

scp -o "ProxyCommand ssh -A B -W %h:%p" C:file .

Это настроит прокси / хоп через хост "B", выбрав имя файла "file" в вашем домашнем каталоге на "C" и депортировав его в текущий рабочий каталог на "A".

Кроме того, вы можете записать это в ваш файл ~/.ssh/config :

Host C
  ProxyCommand ssh -A B -W %h:%p

Тогда вы можете просто:

scp C:file .

Более того, для этого не требуется псевдоним или сценарий. Вы просто используете scp напрямую.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .