Scp দিয়ে আপলোড করার পরে অনুমতিগুলি পরিবর্তন করুন


44

আমি scp ব্যবহার করে আমার শেল অ্যাকাউন্টে ফাইলগুলি আপলোড করছি। যেহেতু আমার কম্পিউটারের চেয়ে সার্ভারে আমার আলাদা আলাদা অনুমতি প্রয়োজন, আমি অ্যাকাউন্টে এসএসএস না করে এবং সেগুলি নিজে নিজেই পরিবর্তন না করে আপলোড করার পরে অনুমতিগুলি সহজেই পরিবর্তন করার উপায় চাই।

উত্তর:


29

আপনি যদি উইন্ডোজ মেশিন থেকে অনুলিপি করছেন তবে আপনি অনুলিপি করতে WinSCP ব্যবহার করতে পারেন এবং আপলোডের পরে অনুলিপি করা ফাইলগুলিতে অনুমতি সেট করার বিকল্প রয়েছে।

যদি তা না হয় তবে আমি মনে করি আপলোডের পরে আপনার একমাত্র পছন্দ সার্ভারে একটি chmod চালানো, যা আপনি ssh কমান্ড দিয়ে দূরবর্তীভাবে করতে পারেন:

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

আমি সে সম্পর্কেও ভেবেছিলাম, তখন ডিরেক্টরিগুলি আপলোড করা সম্পর্কে কী?
ফ্লোরিয়ান মেয়ার

এইচএম, আমি তখন chmod -R করতে পারি। আমার ধারণা খারাপ ধারণা নয়।
ফ্লোরিয়ান মেয়ার

1
ঠিক। scp -r, তারপরে ssh chmod -R
জিগডন

1
প্লিংক এবং পিএসএসপি (পুট্টি প্যাকেজ থেকে) দিয়ে একই কাজটি করতে আমি সাফল্য পেয়েছি
স্টিভাস্তেলান

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

এটি আপনাকে দু'বার প্রমাণীকরণ করা থেকে বিরত রাখে। আরএসসিএনসি সহ আরও অনেক অপশন রয়েছে যা সম্ভবত মালিক, গোষ্ঠী ইত্যাদি সংরক্ষণে সক্ষম হওয়া মান যুক্ত করবে probably


এটি কাজ করছে না।
সোহম

1
কারণ খুঁজে পেয়েছি। আপনি --permsপাশাপাশি ব্যবহার করতে হবে । ব্যাখ্যাশেল
সোহম

5
আপনি কি পুরো, বৈধ, কমান্ড, প্লেসটি প্রদর্শন করতে পারবেন? হয় মন্তব্য হিসাবে, বা উত্তর সম্পাদনা করে
মাওগ

6

Scp নিয়ে কিছু পরীক্ষা-নিরীক্ষা করেছি। টার্গেট সার্ভারে আপলোড করা নতুন ফাইলগুলির জন্য, ফাইলগুলির উত্স সার্ভারের মতোই অনুমতি রয়েছে। যদি বিদ্যমান ফাইলগুলি টার্গেট সার্ভারে ওভাররাইট করা হয় তবে সেই ফাইলগুলির জন্য অনুমতিগুলি পরিবর্তন হয় না।

আমি CentOS 4.6 দিয়ে এই পরীক্ষাগুলি করেছি।


3
এটি একটি উত্তরের পরিবর্তে একটি মন্তব্য হওয়া উচিত
যায়েম হাবলুটজেল

2
সম্মত (তবে এটি সত্যই সহায়তা করেছিল ;-)
মাওগ

এটি আমি স্ক্রিপ্টের মাধ্যমে একবারে ঘুরে দেখার চেষ্টা করছি। Rsync সবসময় গন্তব্য সার্ভারে থাকে না এবং আমি বরং বলি যে আমি যে স্ক্রিপ্টটি দিয়েছি তা আরসিএনসি ইনস্টল করার জন্য অ্যাপ্লিকেশন / ইয়ম ইত্যাদি দিয়ে স্বাধীনতা না নেয়। অনুমতিগুলি সঠিক কিনা তা নিশ্চিত করার জন্য আমাকে scp + chmod বা rm + scp পদ্ধতিতে যেতে হবে বলে মনে হচ্ছে। : - /
zaTricky

5

আপনি এটি টার, এসএসএস এবং উমাস্ক ব্যবহার করে এটি করতে পারেন:

হোস্ট 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 স্যুইচগুলি ফেলে দিতে পারেন যাতে আপনি ফাইলগুলি হোস্ট 1 এ ট্যারিড করে STDOUT (আ।

দ্রষ্টব্য: এটি কেন কাজ করে? টারের ডিফল্ট আচরণটি হ'ল দূরবর্তী ব্যবহারকারীর উমাস্ক ব্যবহার করে ফাইলগুলি আনপ্যাক করা। উপরের উদাহরণে আমি উমাস্ক কমান্ডটি স্পষ্টরূপে এটি অন্যরকম কিছুতে সেট করার জন্য অন্তর্ভুক্ত করেছি যা দেখায় যে দূরবর্তী টারটি দূরবর্তী পক্ষের অনুমতিগুলি পরিবর্তন করছে।


1
আমি এই কমান্ডটি দিয়ে দেখতে পাচ্ছি আপনি স্থানান্তরিত ফাইলগুলিতে কেবলমাত্র কিছু সংক্ষিপ্ত অনুমতি প্রয়োগ করতে পারবেন, যেমন umaskকেবলমাত্র সাবস্ট্রাক্টের অনুমতি হিসাবে , স্থানীয় ফাইলের জন্য আপনার গন্তব্য সার্ভারের 700সাথে ফাইলটি পাওয়া 755যায়নি, বা আমি ভুল করছি?
জাইমে হাবলুটজেল

1
উপরন্তু আপনি প্রয়োজন --no-same-permissionsসেকেন্ডের জন্য tarব্যবহার যদি গন্তব্য ব্যবহারকারী রুট দেখতে superuser.com/a/383801/89031
জেইমি Hablutzel

@ জাইম - এটি সঠিক, এটি কেবলমাত্র umaskরিমোট সার্ভারে লিখিত থাকায় ফাইলগুলির পুরো সেটগুলির জন্য সেট সেট করার অনুমতি দেবে । বিভিন্ন ফাইলের জন্য স্বতন্ত্র নিয়ন্ত্রণ নেই। উদাহরণস্বরূপ, যখন আমি কোনও দূরবর্তী স্থাপনার অনুলিপি করার সময় আমার ল্যাপটপে ঠিক আছে এমন শিথিল অনুমতিগুলি ছিনিয়ে নিতে চাই তাই আমি প্রায়শই এটি ব্যবহার করব।
slm

@ জাইম - ম্যান পৃষ্ঠা --no-same-permissionsঅনুসারে এটি সঠিক tar। আমি আমার উদাহরণে প্রম্পটগুলি পরিবর্তন করেছি যাতে এতে কোনও বিভ্রান্তি নেই।
slm

3

পাইথনে টাস্কের জন্য একটি ছোট স্ক্রিপ্ট লিখেছিলাম। আপনি পাইথন স্ক্রিপ্ট.পি-পি ও + র কিছু ফাইল কিছু / ডায়ার / অন / দ্য সার্ভার / করতে পারেন

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
বাহ, আমি নতুন এসও সাইট, কোড রিভিউ, টি @ শেপাপাং সম্পর্কে কখনও শুনিনি!
অ্যানিএজিলে

2
@ অ্যানিএইগাইল এটি নতুন নয়; এটি 3 বছরেরও বেশি পুরনো :)
tshepang

1

আমি ফোল্ডারে স্টিকি বিট সেট আপ করার পরামর্শ দেব যাতে আপনি সেই ফোল্ডারের নীচে আপলোড করা ফাইলগুলি স্বয়ংক্রিয়ভাবে সেই অনুমতি পায়।

chmod 1644 dir

উপরে ব্যবহৃত "1" স্টিকি বিট সেট করে।

সুতরাং আপনাকে কেবল একটি আপলোড করতে হবে এবং পরে আর কোনও আদেশ চালাতে হবে না।


দয়া করে কেউ কীভাবে এটি কাজ করবে তা ব্যাখ্যা করতে পারেন?
মাউগ

0

ধরে নিই যে আপনি কোনও ইউএনআইএক্স বৈকল্পিকটিতে আপলোড করছেন, আমি মনে করি অনুমতিগুলি আপনার UMASK সেটিংস অনুসরণ করা উচিত। এসসিপি-র জন্য কোন ডট-ফাইলগুলি প্রক্রিয়াজাত করা হয় তা আমার মাথার শীর্ষটি স্মরণ করে না, তবে আপনি যে ফাইলগুলি তৈরি করেন তার একটিতে যদি আপনার UMASK সেট করে থাকেন তবে এর ভিত্তিতে এটির অনুমতি সেট থাকবে। এটি সম্ভবত আপনি রিমোট সিস্টেমে কী শেল ব্যবহার করেন তার উপর নির্ভর করে।

আপনি যা-ই করুন না কেন -p বিকল্পটি ব্যবহার করবেন না কারণ এটি আপনি যা চান তার ঠিক উল্টোটি করে।


নাঃ। -p আমি যা চাইছিলাম তা নয় কারণ আমার স্থানীয় মেশিনের চেয়ে সার্ভারে (হ্যাঁ এটি একটি ইউএনআইএক্স) ভিন্ন অনুমতি প্রয়োজন। আমি অবশ্যই তাদের chmod করতে পারি, -p ব্যবহার করে আবার তাদের chmod করতে পারি, যদিও আমার তখন অনুমতিগুলি সংরক্ষণ করতে হবে।
ফ্লোরিয়ান মায়ার

আমি আপনাকে পরামর্শ দিচ্ছিলাম না যে আপনি -p ব্যবহার করুন, কেবল আপনি যে ছিলেন তা নিশ্চিত করে। আমি আমার পোস্ট স্পষ্ট করব।
tvanfosson
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.