Ruby, 9393 81 bytes
->a,n{w=*1..8;w.product(*[w]*~-a.sizen).select{|r|r.zip(a).mapsum{|x,y|(x-y).absabs*8/3}.sort-[0]==[1,2]==7}}
Quickly explained - old version
Generate all possible positions as vetorsvectors of N numbers between 1 and 8, then check the differences between each vector and the starting position, the sorted array of absolute values of the components must be [<bunch of 0s ...>, 1, 2]
And then:
(Thanks @dingledooper): If we multiply the differences by 8 and divide them by 3, the vector becomes [<bunch of 0s>, 2, 5]
and its sum is unequivocally 7, no other combination of numbers can produce the same sum, so we can simplify the check a lot and shave off 12 bytes.