Как использовать Scp внутри SSH в сценарии оболочки - PullRequest
1 голос
/ 21 декабря 2011

У меня есть сервер ServerA (user1 в качестве ИД пользователя). Я хочу подключиться к тому же серверу ServerA с ИД пользователя в качестве user2, а затем выполнить scp, чтобы получить файлы с другого сервера и сохранить их на сервере ServerA (ИД пользователя в качестве user2).

Может кто-нибудь помочь мне как можно скорее.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Допустим, вы находитесь на hostC (клиент) и хотите скопировать файлы с userX @ hostA на userY@hostB.

Вы можете выполнить команду scp на hostC:

scp userX@hostA:file-to-copy userY@hostB:destination-folder/

Однако вам необходимо пройти аутентификацию.Если у вас настроен ssh-ключ для аутентификации userX @ hostA, то он будет работать нормально.

Однако scp вызовет ssh с опциями отключения или переадресации агента или сброса ключей пересылки, так что даже если выиметь ключ для userY @ hostB, он не будет доступен для hostB, и вам будет предложено ввести пароль.

Одним из решений этого является передача -S <ssh-command> для вызова scp наhostC со сценарием-оберткой для удаления параметров, которые запрещают переадресацию агента, возможно, необходимо явно включить его.

Например,

ssh-wrapper.py

#!/usr/bin/python

import sys, os

def is_exe(fpath):
  return os.path.exists(fpath) and os.access(fpath, os.X_OK)

def which(program):
  fpath, fname = os.path.split(program)
  if fpath:
    if is_exe(program):
      return program
  else:
    for path in os.environ["PATH"].split(os.pathsep):
      exe_file = os.path.join(path, program)
      if is_exe(exe_file):
        return exe_file
  return None

if __name__ == '__main__':
  ssh = which('ssh')
  assert ssh is not None
  args = [ssh] + sys.argv[1:]
  for x in ('-a','-oClearAllForwardings yes'):
    if x in args:
      args.remove(x)
  if '-oForwardAgent yes' not in args:
    args.insert(1,'-oForwardAgent yes')
  os.execl(ssh,*args)

Вызовscp:

scp -S ssh-wrapper.py userX@hostA:file-to-copy userY@hostB:destination-folder/
0 голосов
/ 21 декабря 2011

Не проще ли сделать scp как user1, а затем распределить файлы по user2?Если вам нужно хранить их в месте, доступном только для user2, вы можете su для user2 и переместить их.

...