포트 전달 기능이 있는 VPN을 사용 중이고 전달된 포트를 가져오는 스크립트가 이미 있습니다. 해당 포트를 에서 열지 iptables
만 전송 설정 파일을 시작하기 전에 포트가 자동으로 변경되지 않습니다.
내 전송 설정 파일: 다음을 /home/vlastimil/.config/transmission/settings.json
포함합니다:
{
"alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 0,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-date": 1591362636,
"blocklist-enabled": false,
"blocklist-updates-enabled": true,
"blocklist-url": "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz",
"cache-size-mb": 4096,
"compact-view": false,
"details-window-height": 1010,
"details-window-width": 1562,
"dht-enabled": true,
"download-dir": "/home/vlastimil/Downloads",
"download-queue-enabled": false,
"download-queue-size": 1,
"encryption": 0,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "/home/vlastimil/Downloads",
"incomplete-dir-enabled": false,
"inhibit-desktop-hibernation": true,
"lpd-enabled": false,
"main-window-height": 442,
"main-window-is-maximized": 0,
"main-window-width": 664,
"main-window-x": 1256,
"main-window-y": 570,
"message-level": 2,
"open-dialog-dir": "/home/vlastimil/Downloads",
"peer-congestion-algorithm": "",
"peer-id-ttl-hours": 6,
"peer-limit-global": 200,
"peer-limit-per-torrent": 50,
"peer-port": 24833,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"port-forwarding-enabled": false,
"preallocation": 2,
"prefetch-enabled": true,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"recent-download-dir-1": "/home/vlastimil/Downloads",
"recent-download-dir-2": "/home/vlastimil/Downloads/memtest/PRO/torrent",
"recent-download-dir-3": "/home/vlastimil/Downloads/memtest/Pro",
"recent-download-dir-4": "/media/vlastimil/4TB_Seagate_NTFS/Movies",
"rename-partial-files": true,
"rpc-authentication-required": false,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-host-whitelist": "",
"rpc-host-whitelist-enabled": true,
"rpc-password": "{426d7fbcb4015f3821d212e0203d5e20033661141zKMndND",
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "",
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": true,
"scrape-paused-torrents-enabled": true,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "/home/vlastimil",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"show-backup-trackers": true,
"show-extra-peer-details": false,
"show-filterbar": false,
"show-notification-area-icon": true,
"show-options-window": true,
"show-statusbar": true,
"show-toolbar": true,
"show-tracker-scrapes": true,
"sort-mode": "sort-by-age",
"sort-reversed": false,
"speed-limit-down": 2048,
"speed-limit-down-enabled": false,
"speed-limit-up": 0,
"speed-limit-up-enabled": false,
"start-added-torrents": false,
"statusbar-stats": "total-transfer",
"torrent-added-notification-enabled": false,
"torrent-complete-notification-enabled": false,
"torrent-complete-sound-command": "canberra-gtk-play -i complete-download -d 'transmission torrent downloaded'",
"torrent-complete-sound-enabled": false,
"trash-can-enabled": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-slots-per-torrent": 14,
"user-has-given-informed-consent": true,
"utp-enabled": true,
"watch-dir": "/home/vlastimil/Downloads",
"watch-dir-enabled": false
}
41번째 줄에 있는데 기술적으로는 고쳐졌는지 잘 모르겠지만, 이 문제를 위해서 고쳐진 것입니다.
그래서 저는 65535라는 새로운 포트 번호를 갖고 있으며제자리에이전 포트 번호를 변경하십시오.
sed
or 를 어떻게 쓰는지는 모르겠지만 awk
조금은 있을 것 같지만극도로단순한. 감사해요.
답변1
jq
최상위 peer-port
키 값을 65535로 업데이트하는 데 사용됩니다 .
file=/home/vlastimil/.config/transmission/settings.json
cp "$file" "$file.tmp" &&
jq '."peer-port" |= 65535' "$file.tmp" >"$file" &&
rm -f "$file.tmp"
새 포트 값과 함께 쉘 변수를 사용하십시오.
newport=65535
file=/home/vlastimil/.config/transmission/settings.json
cp "$file" "$file.tmp" &&
jq --argjson new "$newport" '."peer-port" |= $new' "$file.tmp" >"$file" &&
rm -f "$file.tmp"
jq
직접 편집을 할 수 없기 때문에 결과를 원래 이름으로 리디렉션하면서 파일의 임시 복사본에서 실행합니다. 이렇게 하면( jq
원본 파일에서 실행하는 대신 새 임시 파일로 리디렉션한 다음 mv
이전 파일 위로 새 파일 이동을 사용하여) 원본 파일의 메타데이터(예: 소유권 및 권한)가 보존됩니다.
예를 들어, 쉘 변수의 값이 $newport
숫자가 아닌 경우 등 문제가 발생하면 임시 파일은 삭제되지 않고 수정되지 않은 문서가 저장됩니다.
답변2
사용 sed
:
sed -i 's/"peer-port": 12345/"peer-port": 65535/' settings.json