আমি কীভাবে একটি দূরবর্তী rsync প্রক্রিয়াটির জন্য পরিবেশের ভেরিয়েবলগুলি সেট করতে পারি?


12

আমি যখন একটি কম্পিউটার থেকে অন্য কম্পিউটারে ফাইলগুলি অনুলিপি করতে rsync ব্যবহার করি তখন উভয় প্রান্তে একটি আরএসসিএনসি প্রক্রিয়া শুরু হয়। তবে, দূরবর্তী প্রান্তে, শেল ইনিশিয়ালাইজেশন ফাইলগুলি স্পষ্টতই পড়ে না, তাই আমি দূরবর্তী আরএসসিএনসি প্রক্রিয়াটির জন্য পরিবেশের ভেরিয়েবল সেট আপ করতে পারি না। দুর্ভাগ্যক্রমে, এমন একটি সার্ভার রয়েছে যা আমাকে আরএসসিএন করতে হবে যার উপর কাজ করার জন্য আরএসসিএন-এর পরিবেশগত পরিবর্তনশীল প্রয়োজন। আমি সার্ভারে প্রশাসক নই, তাই আমি বিশ্বব্যাপী কনফিগারেশনটি পরিবর্তন করতে পারি না। দূরবর্তী আরএসসিএনসি প্রক্রিয়াটির জন্য পরিবেশ পরিবর্তনযোগ্য সেট করতে আমি কী করতে পারি?


আপনি সার্ভারে আরএসসিএনসি প্রক্রিয়াটি কীভাবে শুরু করবেন? আপনি কি এসএসএসের মাধ্যমে কোনও স্ক্রিপ্ট ট্রিগার করতে পারবেন?
kraftan

আপনি যখন rsync localfilename remotehost:remotefilenameকরেন, সার্ভারে একটি আরএসসিএনসি প্রক্রিয়া শুরু হয়। আমি ঠিক কীভাবে তা নিশ্চিত নই, তবে এটি কোনও শেল ইনিশিয়ালাইজেশন ফাইলগুলি পড়ে না।
রায়ান সি থম্পসন

উত্তর:


20

~/.profilessh somecommandইন্টারেক্টিভ এসএস সেশনের বিপরীতে (বা অন্য লগইন পদ্ধতি যেখানে আপনি একটি ইন্টারেক্টিভ সেশন শুরু করেন) এর বিপরীতে আপনি চালানোর সময় সাধারণত পড়া হয় না ।

এস এস এনভায়রনমেন্ট ভেরিয়েবল প্রেরণকে সমর্থন করে। ওপেনএসএইচ-এ, SendEnvনির্দেশিকাটি ইন ব্যবহার করুন ~/.ssh/config। তবে নির্দিষ্ট পরিবেশের পরিবর্তনশীল অবশ্যই সার্ভার কনফিগারেশনে একটি AcceptEnvনির্দেশের সাথে সক্ষম করতে হবে , সুতরাং এটি আপনার পক্ষে কার্যকর নাও হতে পারে।

ওপেনএসএইচ সার্ভারের পাশে পরিবেশ পরিবর্তনশীলগুলি সেট করার অনুমতি দেয়। আবার, এটি অবশ্যই সার্ভার কনফিগারেশনে সক্ষম করতে হবে, PermitUserEnvironmentনির্দেশ সহ। ভেরিয়েবলগুলি ফাইলটিতে সেট করা যায় ~/.ssh/environment। ধরে নেওয়া যাক আপনি সার্বজনীন কী প্রমাণীকরণ ব্যবহার করেছেন, আপনি প্রতি-কী ভেরিয়েবলগুলি এতে সেট করতে পারেন ~/.ssh/authorized_keys: environment="FOO=bar"প্রাসঙ্গিক লাইনের শুরুতে যুক্ত করুন ।

একটা জিনিষ আমি সবসময় মনে করি যে (আশ্চর্যের ব্যাপার যে) কাজ করে দীর্ঘ সর্বজনীন কী প্রমাণীকরণ ব্যবহার করছেন হিসাবে হিসাবে হয় (AB) ব্যবহার command=বিকল্প মধ্যে authorized_keysফাইল। একটি commandবিকল্প সহ একটি কী কেবল নির্দিষ্ট কমান্ড চালানোর জন্যই ভাল; কিন্তু authorized_keysফাইলের কমান্ডটি পরিবেশগত ভেরিয়েবলের SSH_ORIGINAL_COMMANDসাহায্যে ব্যবহারকারী নির্দিষ্ট করা কমান্ডটি সেট করে (ইন্টারেক্টিভ সেশনগুলির জন্য খালি)। সুতরাং আপনি এ জাতীয় কিছু ব্যবহার করতে পারেন ~/.ssh/authorized_keys(অবশ্যই, আপনি যদি এই কীটি প্রমাণীকরণের জন্য ব্যবহার না করেন তবে এটি প্রযোজ্য নয়):

command="export LD_LIBRARY_PATH=\"$HOME\"/lib;
         if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
           eval \"$SSH_ORIGINAL_COMMAND\";
         else exec \"$SHELL\"; fi" ssh-rsa …

নোট করুন যে আমি সুস্পষ্টতার জন্য লাইন ব্রেকগুলি উপরে রেখেছি, তবে এটি আসলে সমস্ত এক লাইনে থাকা দরকার।

আর একটি সম্ভাবনা হ'ল ~/bin/rsync-wrapperসার্ভারে একটি র‍্যাপার স্ক্রিপ্ট লেখা , এরকম কিছু

#!/bin/sh
. ~/.profile
exec rsync "$@"

তারপরে কমান্ড লাইনে পাস --rsync-path='bin/rsync-wrapper'করুন rsync। আর্গুমেন্টটি --rsync-pathশেল দ্বারা প্রসারিত হয়, সুতরাং আপনি যদি পছন্দ করেন তবে এমন কিছু পাস করে আপনি rsync কমান্ড লাইনটিকে স্ব-অন্তর্ভুক্ত করতে পারেন --rsync-path='. ~/.profile; rsync'

আর একটি অ্যাভিনিউ রয়েছে যা আপনার লগইন শেল বাশ বা zsh হওয়ার উপর নির্ভর করে। বাশ সর্বদা পড়তে থাকে ~/.bashrcযখন এটি আরএসডি বা এসএসডি দ্বারা চালিত হয়, এটি ইন্টারেক্টিভ না হলেও (তবে এটি হিসাবে পরিচিত না হলে sh)। Zsh সর্বদা পড়া ~/.zshenv

## ~/.bashrc
if [[ $- != *i* ]]; then
  # Either .bashrc was sourced explicitly, or this is an rsh/ssh session.
  . ~/.profile
fi

## ~/.zshenv
if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then
  # Not a login shell, but this is an rsh/ssh session
  . ~/.profile
fi

ভাল, যে এটি বেশ পরিমাণে আপ। আমি আশা করি একটি মোড়ক স্ক্রিপ্ট ব্যবহার করার চেয়ে ভাল উপায় ছিল।
রায়ান সি থম্পসন

তবে এক মিনিট অপেক্ষা করুন। যদি আমার শেল ইআরআইএন ফাইলগুলি না পড়া হয়, তবে এটি সার্ভারে কীভাবে এমনকি RSSync বাইনারিটি খুঁজে পাবে? আমি $PATHshell / usr এ ইনস্টল করেছি, একটি মানহীন অবস্থান যা আমাকে আমার শেল ইনি স্ক্রিপ্টগুলিতে যোগ করতে হবে ।
রায়ান সি। থম্পসন

@ রায়ান: আমি আসলে সবচেয়ে প্রত্যক্ষ পদ্ধতিটি ভুলে গেছি (আমার সম্পাদনা দেখুন) তবে এটিরও সার্ভার কনফিগারেশনে সক্ষম করার জন্য একটি নির্দেশ প্রয়োজন। আপনি যদি PATHঅ্যাকাউন্টটি গ্রহণের কোনও উপায় খুঁজে পেয়ে থাকেন তবে আপনাকে সেখানে অন্য কোনও ভেরিয়েবল সেট করতে সক্ষম হওয়া উচিত। (যদি এটি কাজ না করে তবে যে set -xকোনও শেল স্ক্রিপ্ট দিয়ে শুরু করে যতটা ট্রেস যুক্ত করার চেষ্টা করুন ; rsyncবাইনারিটি একটি মোড়ক স্ক্রিপ্ট দ্বারা প্রতিস্থাপন করুন যা পরিবেশে কোনও ফাইলে ডাম্প করে তারপরে আসল বাইনারি বলে))
গিলসের এসও - অশুভ হওয়া বন্ধ করুন '

কি হবে ~/.ssh/rc?
রায়ান সি থম্পসন

@ রায়ান: ~/.ssh/rcএকটি পৃথক শেল প্রক্রিয়া দ্বারা চালিত হয়। আমি মনে করি আপনার সেরা বেটটি একটি মোড়ক স্ক্রিপ্ট বা --rsync-path='. ~/.profile; rsync'। অথবা rsyncআপনার অন্যান্য প্রশ্ন অনুসারে একটি উপযুক্ত আরপ্যাথ দিয়ে পুনরায় রচনা করা।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.