Передача файлов через ssh, но без scp или sftp

Когда используются операторы '==' и '! =', Строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в Сопоставление с шаблоном

Итак, когда вы включите в шаблон двойные кавычки, bash ожидает увидеть их в имени файла. Удалите двойные кавычки и / или ведущие * для успеха.

if [[ $file == $patern ]]
then
    echo "Match";
else
    echo "No Match";
fi
3
15.09.2018, 21:23
4 ответа

Я не хотел оставлять это в качестве ответа, но раздел комментариев стал больше, и вы получите уведомление от SE, чтобы перенести разговор в окно чата .

Итак, нажмите , введите несколько раз и введите ~? без пробелов. Нет, ничего.

вы должны увидеть что-то подобное (или точно так же)

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

в этот момент введите ~ C , и вы должны увидеть приглашение ssh> . На этом этапе введите

ssh> !scp /path/to/some/file/on/your/local/machine user@remoteserver

, поскольку вы уже аутентифицированы, он должен передать файл через существующее соединение.

​​
5
27.01.2020, 21:11

В зависимости от того, насколько вы хотите автоматизировать, ожидайте - это вариант для ретрансляции данных через хост-бастион и во внутренние системы. "вводя" что-то в сеанс SSH, как это сделал бы человек, только быстрее:

#!/usr/bin/env expect

if {[llength $argv] == 0} {
  puts stderr "Usage: $argv0 bastion internalhost localfile"
  exit 1
}

set basthost [lindex $argv 0]
set desthost [lindex $argv 1]
set fileup   [lindex $argv 2]

spawn ssh -a -e none -o ClearAllForwardings=yes -x $basthost

# TODO login foo here for bastion host, e.g. send the password
# if see that prompt

expect {
  # TODO handle timeout, eof, etc.

  # TODO I have no idea what your ncurses interface looks
  # like, though there's doubtless something that could
  # be matched and the appropriate input sent to it...
  -ex "$ " {
    send -- "ssh $desthost\r"
    # TODO handle subsequent login to the internal host here
  }
}

Затем, когда у вас есть редактор или что-то еще, открытое на целевом хосте (с помощью соответствующих операторов send ), скармливайте ему данные via:

set upfd [open $fileup]
while {[gets $upfd line] >= 0} {
  send -- "$line\r"
}

А затем используйте дополнительные вызовы send для сохранения файла, выхода и т. д. Также, обработки ошибок и т. д.

3
27.01.2020, 21:11

Первое - это конфигурация, где вы настраиваете хост для прохождения через "дверь" или, скорее, jumpbox. Ваш ~/.ssh/config будет выглядеть примерно так:

Host door
  Hostname door.example.com
  User username_on_door
  # ...
Host target
  Hostname tagret.example.com
  User user_on_target
  # ...
  ProxyCommand ssh -W %h:%p door

Затем вы можете подключиться одной командой непосредственно к вашей целевой системе: ssh target

Затем вы также можете передавать файлы туда и обратно одной командой:

ssh taget "tar czpf - /some/important/data" | tar xzpf - -C /new/root/directory
tar cpf - /some/important/data | ssh target "tar xpf - -C /some/directory/" 

или даже запустить sshfs на этом хосте:

sshfs target:/dir/ /mnt/target

Не слишком сложно, не так ли?

1
27.01.2020, 21:11

Вы можете попробовать scp2отсюдаhttps://github.com/alingse/scp2

Это глупый и медленный способ.

scp2 -f./scp2/core.py -u user@IP:~/core.py

здесь два шага

1. file --> base64 --> chunk --> ssh.execute(echo "[chunk body]" >> /tmpfile)
2. ssh.execute(cat /tmpfile | tr -d '\n' |base64 -d > dest)

На самом деле это зависит только от ssh.

0
05.04.2021, 15:10

Теги

Похожие вопросы