Вы можете использовать это вместо этого, и она будет работать
echo "$target" | sudo tee --append /etc/udev/rules.d/test.txt
tee
команда с - append
(вкратце -a
) опция добавляет отображаемую строку в указанный файл, ничего не перезаписывается. tee
также записывает в STDOUT
, который при желании может быть перенаправлен на / dev / null
Другой способ сделать это -
sudo bash -c 'echo "$target" > /etc/udev/rules.d/test.txt'
, но я рекомендую придерживаясь первого примера, потому что echo "$ target"
будет запущен без прав суперпользователя
Вы можете очень просто настроить ProxyCommand
/ProxyJump
, чтобы вы могли scp
напрямую подключаться к удаленному серверу. Создайте ~/.ssh/config
со следующим:
Host server1
ProxyCommand ssh -W %h:%p server2
и тогда вы сможете выполнять scp напрямую:
scp local.file server1:/path/to/remote.file
Если вы действительно настаиваете на переадресации портов, то после создания «туннеля» с помощью первая введенная вами команда:
ssh -L 8888:server1:22 server2
вам нужно будет передать данные следующим образом (где -P
указывает порт, на котором установлено перенаправленное соединение):
scp -P 8888 local.file server1:/path/to/remote.file
scp
поддерживает удаленный исходный файл, а также удаленный файл назначения. Он использует ssh для передачи данных, так что это должно быть эквивалентно вашим попыткам туннелирования:
scp file myuser@server2:~/
scp myuser@server2:~/file myuser@server1:~/
Кстати, если myuser
совпадает с вашим локальным логином, его можно не указывать:
scp file server2:~/
scp server2:~/file server1:~/
Если вам действительно нужен туннель (, чтобы файл никогда не касался файловой системы server2
), тогда на этот вопрос хорошо дан ответ здесь:https://superuser.com/questions/276533/scp-files-via-intermediate-host
На самом деле так хорошо, что можно считать, что на этот вопрос уже дан ответ...
Поместите следующее в ~/.ssh/config хост-сервера
XAuthLocation /opt/X11/bin/xauth
Host remote
User foo
Hostname remote-server
ProxyCommand ssh foo@gateway-server -W remote-server:22
затем scp как
scp remote:~/file_to_be_copied.
Я нахожу это очень удобным:
scp -J myuser@server2 file myuser@server1:~/
Кроме того, если вы сохраняете одинаковые имена пользователей на своем ноутбуке и на каждом из серверов, вы можете просто не указывать имя пользователя. Если хотите, вы также можете поместить server2 в свой файл hosts (/etc/hosts )с красивым и коротким именем для более быстрого ввода:
# in file /etc/hosts
74.125.71.113 s2 # this is server2
Тогда команда для передачи file
на server1 будет:
scp -J s2 file server1:~/