Scp के साथ अपलोड करने पर अनुमतियाँ बदलें


44

मैं scp का उपयोग करके अपने शेल खाते में फाइलें अपलोड कर रहा हूं। जैसा कि मुझे अपने कंप्यूटर की तुलना में सर्वर पर विभिन्न अनुमतियों की आवश्यकता है, मैं आसानी से खाता अपलोड करने और उन्हें मैन्युअल रूप से बदलने की आवश्यकता के बिना अपलोड पर अनुमतियों को बदलने का एक तरीका है।

जवाबों:


29

यदि आप एक विंडोज़ मशीन से कॉपी कर रहे हैं, तो आप कॉपी करने के लिए WinSCP का उपयोग कर सकते हैं , और इसमें अपलोड के बाद कॉपी की गई फ़ाइलों पर अनुमतियाँ सेट करने का विकल्प है।

यदि नहीं, तो मुझे लगता है कि आपकी एकमात्र पसंद अपलोड के बाद सर्वर पर एक chmod निष्पादित करना है, जिसे आप ssh कमांड के साथ दूरस्थ रूप से कर सकते हैं:

scp /path/to/file server:/server/path/to/file
ssh server chmod 644 /server/path/to/file

मैंने इसके बारे में भी सोचा, फिर निर्देशिकाओं को अपलोड करने के बारे में क्या?
फ्लोरियन मेयर

हम्म, मैं तो चोद-आर कर सकता था। नहीं एक बुरा विचार मुझे लगता है।
फ्लोरियन मेयर

1
सही। scp -r, उसके बाद
sm


22

मेरा पसंदीदा कार्य समाधान rsyncइसके बजाय उपयोग करना होगा :

बदलने के:

scp /path/to/file server:/server/path/to/file

साथ में:

rsync --chmod=u+rwx,g+rwx,o+rwx /path/to/file server:/path/to/file

यह आपको दो बार प्रमाणित करने से रोकता है। Rsync के साथ कई अन्य विकल्प भी हैं जो संभवतः मूल्य जोड़ देंगे जैसे कि मालिक, समूह आदि को संरक्षित करने में सक्षम होना।


ये काम नहीं कर रहा है।
सोहम

1
कारण पता चला। आपको भी उपयोग करना है --permsexplainshell.com/...
सोहम

5
क्या आप पूर्ण, वैध, आदेश, श्रोणि दिखा सकते हैं? या तो टिप्पणी के रूप में, या उत्तर को
संपादित करके

6

मैंने scp के साथ कुछ प्रयोग किए हैं। लक्ष्य सर्वर पर अपलोड की गई नई फ़ाइलों के लिए, फ़ाइलों के पास स्रोत सर्वर की तरह ही अनुमतियां हैं। यदि मौजूदा फ़ाइलों को लक्ष्य सर्वर पर अधिलेखित किया जाता है, तो उन फ़ाइलों के लिए अनुमतियाँ परिवर्तित नहीं होती हैं।

मैंने ये प्रयोग CentOS 4.6 के साथ किया है।


3
यह एक उत्तर के बजाय एक टिप्पणी होनी चाहिए
Jaime Hablutzel

2
वृद्ध (लेकिन यह वास्तव में मदद की; ;-)
मग

यह वही है जो मैं स्क्रिप्ट के माध्यम से एक में घूमने की कोशिश कर रहा हूं। रुंटिंक हमेशा गंतव्य सर्वर पर नहीं होता है और मैं यह चाहता हूं कि जो स्क्रिप्ट मैं देता हूं, वह रिपर्ट को स्थापित करने के लिए उपयुक्त / यम आदि के साथ स्वतंत्रता न ले। लगता है कि मुझे अनुमतियाँ सही हैं, यह सुनिश्चित करने के लिए scp + chmod या rm + scp विधि पर जाना पड़ सकता है। : - /
zaTricky

5

आप इसे इस तरह से टार, 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

host2 पर:

[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 स्विच को टार पर ड्रॉप कर सकते हैं, जिसे मैंने यहां केवल इसलिए शामिल किया है ताकि आप होस्ट 1 पर फ़ाइलों को तारांकित करके देख सकें और एसटीडीयूएसटी (उर्फ -) के माध्यम से भेजा जा सके और फिर होस्ट 2 पर अन-टर्ड हो सके।

नोट: यह क्यों काम करता है? टार का डिफ़ॉल्ट व्यवहार दूरस्थ उपयोगकर्ता के umask का उपयोग करके फ़ाइलों को अनपैक करना है। उपरोक्त उदाहरण में मैंने कमांड ऑमस्क को स्पष्ट रूप से कुछ अलग सेट करने के लिए शामिल किया है जो दर्शाता है कि रिमोट टार रिमोट साइड पर अनुमतियों को बदल रहा है।


1
जैसा कि मैं इस आदेश के साथ देख सकता हूं कि आप केवल स्थानांतरित फ़ाइलों के लिए कम अनुमतियों को लागू कर सकते हैं, केवल अनुमतियों को umaskप्रतिस्थापित 700कर सकते हैं , उदाहरण के लिए एक स्थानीय फ़ाइल के साथ आप 755गंतव्य सर्वर में फ़ाइल प्राप्त नहीं कर सकते , या क्या मैं गलत हूं?
Jaime Hablutzel

1
इसके अलावा आपको --no-same-permissionsदूसरे tarउपयोग की आवश्यकता है यदि गंतव्य उपयोगकर्ता रूट है, तो देखें superuser.com/a/383801/89031
Jaime Hablutzel

@jaime - यह सही है, यह केवल आपको umaskफ़ाइलों के पूरे सेट के लिए सेट करने की अनुमति देगा क्योंकि वे दूरस्थ सर्वर पर लिखे गए हैं। अलग-अलग फ़ाइलों के लिए कोई व्यक्तिगत नियंत्रण नहीं है। मैं अक्सर इसका उपयोग करता हूं क्योंकि मैं अपने लैपटॉप पर आराम से अनुमतियों को छीनना चाहता हूं, जब एक दूरस्थ परिनियोजन के लिए कॉपी करते हैं, उदाहरण के लिए।
SLM

@jaime - --no-same-permissionsसही है और साथ ही tarमैन पेज के अनुसार । मैंने अपने उदाहरण में संकेत बदल दिए हैं, इसलिए उस पर कोई भ्रम नहीं है।
SLM

3

मैंने पायथन में कार्य के लिए एक छोटी स्क्रिप्ट लिखी। आप python script.py -p o + r कुछ फाइल्स को कुछ / dir / on / / 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
क्या आपको कोड समीक्षा में अपना कोड पोस्ट करने का मन है । वहाँ पर अच्छे सुझाव दिए जा सकते हैं कि कैसे इसमें सुधार किया जा सकता है।
tshepang

1
वाह, मैंने कभी नई एसओ साइट के बारे में नहीं सुना, कोड की समीक्षा, ty @Thehepang!
ऐनीइजाइल

2
@AnneTheAgile यह नया नहीं है; यह 3 साल से अधिक पुराना है :)
tshepang

1

मैं फ़ोल्डर पर चिपचिपा सा सेट करने का सुझाव दूंगा ताकि आपके द्वारा उस फ़ोल्डर के तहत अपलोड की जाने वाली फ़ाइलों को वह अनुमति अपने आप मिल जाए।

chmod 1644 dir

ऊपर प्रयोग किया गया "1" चिपचिपा सा सेट करता है।

इसलिए आपको केवल एक अपलोड करना होगा और बाद में दूसरा कमांड नहीं चलाना होगा।


कोई समझा सकता है कि यह कैसे काम करेगा, कृपया?
मावग

0

यदि आप UNIX संस्करण में अपलोड कर रहे हैं, तो मुझे लगता है कि अनुमतियाँ आपके UMASK सेटिंग्स का पालन करना चाहिए। मुझे अपने सिर के ऊपर से याद नहीं है, जो डॉट-फाइलें एससीपी के लिए संसाधित हो जाती हैं, लेकिन यदि आप अपना यूएमएएसके उन फाइलों में से एक में सेट करते हैं, तो आपके पास इसके आधार पर अनुमतियाँ सेट होंगी। यह संभवतः इस बात पर निर्भर करता है कि आप रिमोट सिस्टम पर किस शेल का उपयोग करते हैं।

जो कुछ भी आप करते हैं, -p विकल्प का उपयोग न करें क्योंकि यह जो आप चाहते हैं उसके ठीक विपरीत है।


नहीं। -p वह नहीं है जो मैं चाहता था क्योंकि मुझे अपने स्थानीय मशीन की तुलना में सर्वर पर अलग-अलग अनुमतियों की आवश्यकता है (हाँ यह एक UNIX है)। मैं निश्चित रूप से उन्हें chmod कर सकता हूं, उपयोग -p और फिर उन्हें वापस chmod कर सकता हूं, हालांकि मुझे तब अनुमतियों को संग्रहीत करने की आवश्यकता होगी।
फ्लोरियन मेयर

मैं सुझाव नहीं दे रहा था कि आप -p का उपयोग करें, बस पुष्टि करें कि आप थे। मैं अपनी पोस्ट स्पष्ट करूँगा।
तवान्फोसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.