Полномочия изменения после загрузки с scp

Я загружаю файлы на свою учетную запись с доступом через оболочку с помощью scp. Поскольку мне нужны различные полномочия на сервере, чем на моем компьютере, я хотел бы иметь способ легко изменить полномочия на загрузку, не нуждаясь к ssh в учетную запись и изменить их вручную.

44
задан 11.10.2008, 19:52

4 ответа

Если вы копируете с машины windows, вы можете использовать WinSCP для копирования, и у него есть возможность установить разрешения на копируемые файлы после загрузки.

Если нет, то я думаю, что ваш единственный выбор - это выполнить на сервере кхмод после загрузки, что вы могли бы сделать удаленно с помощью команды ssh:

scp /path/to/file server:/server/path/to/file
ssh server chmod 644 /server/path/to/file
30
ответ дан 07.12.2019, 08:38

Я написал небольшой скрипт для этой задачи на Python. Вы можете сделать python script.py -p o+r некоторые файлы some/dir/on/the/server/

import subprocess
import sys
from optparse import OptionParser


DEFAULT_SERVER = 'your.server.com'

parser = OptionParser()

parser.add_option("-p", "--permissions", action="store", 
                     type="str", dest="perm", metavar="PERM",
                     help="chmod files to PERM", default=None)
parser.add_option("-s", "--server", action="store", 
                     type="str", dest="serv", metavar="SERVER",
                     help="scp to SERVER", default=DEFAULT_SERVER)

options, args = parser.parse_args()
files = args[:-1]
direct = args[-1]

proc = subprocess.Popen(['scp'] + files + ['%s:%s' % (options.serv, direct)],
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if proc.wait() != 0:
    print >>sys.stderr, "Uploading failed!"
    sys.exit(1)

if options.perm is not None:
    arg_dict = dict(dir=direct, perm=options.perm, files=' '.join(files))
    proc = subprocess.Popen(['ssh', options.serv, 'cd %(dir)s;'
                             'chmod -R %(perm)s %(files)s' % arg_dict],
                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
3
ответ дан 07.12.2019, 08:38

Предположив, что вы загружаете в UNIX вариант, я думаю, что разрешения должны соответствовать вашим настройкам UMASK. Я не помню, какие файлы с точками обрабатываются для SCP, но если вы установите свой UMASK в один из этих файлов, то разрешения будут установлены на его основе. Вероятно, это зависит от того, какую оболочку вы используете на удаленной системе.

Что бы вы ни делали, не используйте опцию -p, так как она делает абсолютно противоположное.

.
0
ответ дан 07.12.2019, 08:38

Вы можете сделать это, используя tar, ssh, и umask вот так:

на хосте 1:

[saml@host1 testdir]$ pwd
/tmp/testdir

[saml@host1 testdir]$ ls -l
total 12
-rw-r--r--  1 saml saml 21 May 19 00:21 file1
-rw-r--r--  1 saml saml 48 May 19 00:21 file2
-rw-r--r--  1 saml saml 28 May 19 00:21 file3

[saml@host1 testdir]$ tar cvf - . | (ssh host2 "umask 0277; cd /tmp/testdir;tar xvf -")
./
./file1
./file2
./file3
./
./file1
./file2
./file3

на хосте 2:

[samr@host2 testdir]$ pwd
/tmp/testdir

[samr@host2 testdir]$ ls -l
total 12
-r-------- 1 samr web 21 May 19 00:21 file1
-r-------- 1 samr web 48 May 19 00:21 file2
-r-------- 1 samr web 28 May 19 00:21 file3

Вы можете опустить -v переключатели на tar, которые я включил сюда только для того, чтобы вы могли видеть файлы, которые были запятнаны на хосте 1 и отправлены через STDOUT (так же известный как STDOUT). -) и затем получить несмоленые файлы на хосте2.

ПРИМЕЧАНИЕ: Почему это работает? Поведение Tar по умолчанию заключается в распаковке файлов с помощью умаски удаленного пользователя. В приведенном выше примере я включил команду umask, чтобы явно установить ее на что-то другое, что показывает, что удаленный tar изменяет разрешения на удаленной стороне.

.
5
ответ дан 07.12.2019, 08:38

Теги

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