Защищенная копия по двум IP-адресам в одной сети с локальной машиной [дубликат]

Попробуйте следующее: -

def takeInput(required):
  print 'ooo or OOO to exit'
  ans = raw_input('Enter: ')

  if not ans:
      print "You entered nothing...!"
      return takeInput(required) 

      ##  FOR Exit  ## 
  elif ans in ['ooo', 'OOO']:
    print "Closing instance."
    exit()

  else:
    if ans.isdigit():
      current = 'int'
    elif set('[~!@#$%^&*()_+{}":/\']+$').intersection(ans):
      current = 'other'
    elif isinstance(ans,basestring):
      current = 'str'        
    else:
      current = 'none'

  if required == current :
    return ans
  else:
    return takeInput(required)

## pass the value in which type you want [str/int/special character(as other )]
print "input: ", takeInput('str')
61
задан TML 30 April 2014 в 22:52
поделиться

4 ответа

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

Нравится это:

# First, open the tunnel
ssh -L 1234:remote2:22 -p 45678 user1@remote1
# Then, use the tunnel to copy the file directly from remote2
scp -P 1234 user2@localhost:file .

Обратите внимание, что вы подключаетесь как user2@localhost в действительной команде scp, потому что она находится на порту 1234 на localhost, что первая Экземпляр ssh прослушивает прямые соединения с remote2. Также обратите внимание, что вам не нужно запускать первую команду для каждой последующей копии файла; вы можете просто оставить его работать.

84
ответ дан Dolda2000 20 August 2018 в 14:33
поделиться
  • 1
    Спасибо, это похоже на то, что мне нужно. Таким образом, я создал туннель, отпечаток пальца совпадает с одним из серверов, но у меня есть «Permission denied (publickey) & quot; ошибка. Я думаю, мне нужно спросить мою сеть / sysadmin, почему она не работает. – Danosaure 6 February 2012 в 07:19
  • 2
    Хорошо, так или иначе, я работал во второй раз, когда пытался. – Danosaure 6 February 2012 в 07:22
  • 3
    Благодаря! Мне пришлось изменить -p 45678 на -p 22, так как мой remote1 SSH прослушивает порт 22 – Montaro 29 November 2015 в 15:46
  • 4
    Мне также пришлось использовать -p 22 вместо -p 45678. Также scp -P 1234 ... не работает для меня. Я получаю ssh: connect to host localhost port 1234: Connection refused. Когда я пытался с scp -P 22 ..., он работает, но он копирует файл в remote 1, а не на мой локальный компьютер (remote2). – sinner 27 October 2017 в 09:53
  • 5
    Любой инструмент пользовательского интерфейса для этого? – ExploringApple 18 June 2018 в 09:56

Это сделает трюк:

scp -o 'Host remote2' -o 'ProxyCommand ssh user@remote1 nc %h %p' user@remote2:path/to/file .

Чтобы напрямую передать файл с узла remote2, добавьте два параметра (Host и ProxyCommand) к вашему ~ / .ssh / config (см. также ответ на суперпользователе). Затем вы можете запустить:

scp user@remote2:path/to/file .

с вашей локальной машины, не задумываясь о remote1.

28
ответ дан Community 20 August 2018 в 14:33
поделиться
  • 1
    Хороший подход! Хотя -o 'Host remote2' не кажется действительно необходимым при запуске из командной строки (т. Е. Копировать один раз, не касаясь ~ / .ssh / config) – Mike 3 February 2014 в 16:57
  • 2
    Тоже самое. Это работает для меня без -o 'Host remote2'. Благодарю. – sinner 27 October 2017 в 09:54

Двойной ssh

Даже в сложном случае вы можете обрабатывать передачу файлов с помощью одной командной строки, просто с помощью ssh ;-) И это полезно, если remote1 не может подключиться к localhost:

ssh user1@remote1 'ssh user2@remote2 "cat file"' > file

tar

Но вы потеряете свойства файла (право собственности, разрешения ...).

Однако tar ваш друг сохранит эти свойства файла:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar c file"' | tar x

Вы также можете сжать, чтобы уменьшить пропускную способность сети:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj file"' | tar xj

И tar также позволяет переносить рекурсивный каталог через basic ssh:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj ."' | tar xj

ionice

Если файл огромен и вы не хотите беспокоить другие важные сетевые приложения, вы можете пропустить ограничение пропускной способности сети, предоставляемое scp и rsync (например, scp -l 1024 user@remote:file не использует более 1 Мбит / с).

Но обходной путь использует ionice , чтобы сохранить одиночная командная строка:

ionice -c2 -n7 ssh u1@remote1 'ionice -c2 -n7 ssh u2@remote2 "cat file"' > file

Примечание: ionice может быть недоступно в старых дистрибутивах.

57
ответ дан olibre 20 August 2018 в 14:33
поделиться
  • 1
    Спасибо за все описание, но я думаю, что решение Dolda2000 проще. Это было то, что я пытался, но не мог понять. – Danosaure 6 February 2012 в 10:44
  • 2
    Это впечатляюще хороший ответ и заслуживает большего количества голосов. И это гораздо легче, чем принятый ответ, на мой взгляд. – Rik Smith-Unna 2 March 2017 в 14:39
  • 3
    Я согласен, что это лучшее решение, чем принятый ответ. Таким образом, соединение автоматически очищается. – Doug 13 February 2018 в 21:28
  • 4

С версией openssh 7.3 и выше это легко. Используйте параметр ProxyJump в файле конфигурации.

# Add to ~/.ssh/config 
Host bastion
    Hostname bastion.client.com
    User userForBastion
    IdentityFile ~/.ssh/bastion.pem

Host appMachine
    Hostname appMachine.internal.com
    User bastion
    ProxyJump bastion                   # openssh 7.3 version new feature ProxyJump
    IdentityFile ~/.ssh/appMachine.pem. #no need to copy pem file to bastion host  

Команды для запуска для входа в систему или копирования

ssh appMachine   # no need to specify any tunnel. 
scp helloWorld.txt appMachine:.   # copy without intermediate jumphost/bastion host copy.** 

, вы можете указать хост хоста бастиона, используя опцию «-J» для команды ssh, если она не настроена в файле конфигурации ,

Заметка scp, похоже, не поддерживает флаг «-J». (я не мог найти в man-страницах. Однако над scp работает с настройкой файла конфигурации)

0
ответ дан user3851404 20 August 2018 в 14:33
поделиться